From patchwork Sun Mar 6 17:15:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eliad Peller X-Patchwork-Id: 8513671 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 06543C0554 for ; Sun, 6 Mar 2016 17:23:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 043A72017D for ; Sun, 6 Mar 2016 17:23:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F1B1B2015E for ; Sun, 6 Mar 2016 17:23:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751343AbcCFRPp (ORCPT ); Sun, 6 Mar 2016 12:15:45 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:33868 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751147AbcCFRPn (ORCPT ); Sun, 6 Mar 2016 12:15:43 -0500 Received: by mail-wm0-f66.google.com with SMTP id p65so6984023wmp.1 for ; Sun, 06 Mar 2016 09:15:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wizery-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=0j+IHoSl4clCAg87y6iUQtlnNewohXkJUadRVvvUm1E=; b=U9ievJqSevOnufPX5caC9AGeRQ6/Y57/w2gjCS0IVkafwRDgYVRGPHB9Ik9FPcC+t4 0XoF/KNoheEj5FIdwl2cg4KBQRWH09K1Nqgnt4FPxBvCI3KOoItyR3vl13Ts+lUsv89h a3Drm1HRxD1/D2Y8ZvzyC2kE0qqF5qA45fttvzEbaxepZGfYULy3YUBXSP+gOa8yhk6T OiLXr01yijo8os6F5+RYABcNe7kdUUxTBI5bHGDKwPuBvVKINkL6P1DAXrfJe9fOiPCL frQSVjXNCr8OJpvBwHbeIlUItb1/v7kAq+re7yXKkcQ+C1SBMkvJczYG/N9gqRT5fpp5 ufmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=0j+IHoSl4clCAg87y6iUQtlnNewohXkJUadRVvvUm1E=; b=TWHMf/6Chv9Gmv2ShSSR/pF3EvOOXTE8WjtEDm39nMJk8E8gnCj01oosCvAZoahM2A uyID13E3ec+GvtdTDJWolON+hhDa592vvm9JUbfprpNy0uC0fbG42I9VWCXomq9deXvd ql47eCE5oBy3IpzmmPu1HDg/zuM/2+9s1ofepN0lvbcOBJJqc2FVDyjgCKiECxnG0PnF BVH3UKiTbkuoDDvpp8hlPhKq7DsWwwKos1NNbBxvwRGUNkG66zJMde84Whr9qcwBSMal eGpkCWU4FzqR8GxgDH54Pz+dk7zrhI3d8PHnOxGkdxA+oMgk6D4jOb1C2lqQptHqbfeR nptw== X-Gm-Message-State: AD7BkJLRA7vG2zUkme4/5UnPTiB51Rg6UETVrnn5fEq/azYZ8vLnJUBQZI66C3UbUajMOQ== X-Received: by 10.194.92.107 with SMTP id cl11mr21495475wjb.21.1457284541793; Sun, 06 Mar 2016 09:15:41 -0800 (PST) Received: from localhost.localdomain (93-172-245-144.bb.netvision.net.il. [93.172.245.144]) by smtp.gmail.com with ESMTPSA id 202sm9575459wmo.7.2016.03.06.09.15.40 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 06 Mar 2016 09:15:41 -0800 (PST) From: Eliad Peller To: linux-wireless@vger.kernel.org Subject: [PATCH 2/2] wlcore/wl18xx: add radar_debug_mode handling Date: Sun, 6 Mar 2016 19:15:34 +0200 Message-Id: <1457284534-10789-2-git-send-email-eliad@wizery.com> X-Mailer: git-send-email 2.6.3 In-Reply-To: <1457284534-10789-1-git-send-email-eliad@wizery.com> References: <1457284534-10789-1-git-send-email-eliad@wizery.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add debugfs key (under CFG80211_CERTIFICATION_ONUS configuration) to set/clear radar_debug_mode. In this mode, the driver simply ignores radar events (but prints them). The fw is notified about this mode through a special generic_cfg_feature command. This mode is relevant only for ap mode. look for it when initializing ap vif. Signed-off-by: Eliad Peller --- drivers/net/wireless/ti/wl18xx/debugfs.c | 66 ++++++++++++++++++++++++++++++++ drivers/net/wireless/ti/wl18xx/event.c | 3 +- drivers/net/wireless/ti/wlcore/init.c | 5 +++ drivers/net/wireless/ti/wlcore/wlcore.h | 1 + 4 files changed, 74 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ti/wl18xx/debugfs.c b/drivers/net/wireless/ti/wl18xx/debugfs.c index 4edfe28..86ccf84 100644 --- a/drivers/net/wireless/ti/wl18xx/debugfs.c +++ b/drivers/net/wireless/ti/wl18xx/debugfs.c @@ -345,6 +345,69 @@ static const struct file_operations dynamic_fw_traces_ops = { .llseek = default_llseek, }; +#ifdef CONFIG_CFG80211_CERTIFICATION_ONUS +static ssize_t radar_debug_mode_write(struct file *file, + const char __user *user_buf, + size_t count, loff_t *ppos) +{ + struct wl1271 *wl = file->private_data; + struct wl12xx_vif *wlvif; + unsigned long value; + int ret; + + ret = kstrtoul_from_user(user_buf, count, 10, &value); + if (ret < 0) { + wl1271_warning("illegal radar_debug_mode value!"); + return -EINVAL; + } + + /* valid values: 0/1 */ + if (!(value == 0 || value == 1)) { + wl1271_warning("value is not in valid!"); + return -EINVAL; + } + + mutex_lock(&wl->mutex); + + wl->radar_debug_mode = value; + + if (unlikely(wl->state != WLCORE_STATE_ON)) + goto out; + + ret = wl1271_ps_elp_wakeup(wl); + if (ret < 0) + goto out; + + wl12xx_for_each_wlvif_ap(wl, wlvif) { + wlcore_cmd_generic_cfg(wl, wlvif, + WLCORE_CFG_FEATURE_RADAR_DEBUG, + wl->radar_debug_mode, 0); + } + + wl1271_ps_elp_sleep(wl); +out: + mutex_unlock(&wl->mutex); + return count; +} + +static ssize_t radar_debug_mode_read(struct file *file, + char __user *userbuf, + size_t count, loff_t *ppos) +{ + struct wl1271 *wl = file->private_data; + + return wl1271_format_buffer(userbuf, count, ppos, + "%d\n", wl->radar_debug_mode); +} + +static const struct file_operations radar_debug_mode_ops = { + .write = radar_debug_mode_write, + .read = radar_debug_mode_read, + .open = simple_open, + .llseek = default_llseek, +}; +#endif /* CFG80211_CERTIFICATION_ONUS */ + int wl18xx_debugfs_add_files(struct wl1271 *wl, struct dentry *rootdir) { @@ -510,6 +573,9 @@ int wl18xx_debugfs_add_files(struct wl1271 *wl, DEBUGFS_ADD(conf, moddir); DEBUGFS_ADD(radar_detection, moddir); +#ifdef CONFIG_CFG80211_CERTIFICATION_ONUS + DEBUGFS_ADD(radar_debug_mode, moddir); +#endif DEBUGFS_ADD(dynamic_fw_traces, moddir); return 0; diff --git a/drivers/net/wireless/ti/wl18xx/event.c b/drivers/net/wireless/ti/wl18xx/event.c index 719907a..ff6e46d 100644 --- a/drivers/net/wireless/ti/wl18xx/event.c +++ b/drivers/net/wireless/ti/wl18xx/event.c @@ -146,7 +146,8 @@ int wl18xx_process_mailbox_events(struct wl1271 *wl) mbox->radar_channel, wl18xx_radar_type_decode(mbox->radar_type)); - ieee80211_radar_detected(wl->hw); + if (!wl->radar_debug_mode) + ieee80211_radar_detected(wl->hw); } if (vector & PERIODIC_SCAN_REPORT_EVENT_ID) { diff --git a/drivers/net/wireless/ti/wlcore/init.c b/drivers/net/wireless/ti/wlcore/init.c index e92f263..d0b7734 100644 --- a/drivers/net/wireless/ti/wlcore/init.c +++ b/drivers/net/wireless/ti/wlcore/init.c @@ -558,6 +558,11 @@ static int wl12xx_init_ap_role(struct wl1271 *wl, struct wl12xx_vif *wlvif) if (ret < 0) return ret; + if (wl->radar_debug_mode) + wlcore_cmd_generic_cfg(wl, wlvif, + WLCORE_CFG_FEATURE_RADAR_DEBUG, + wl->radar_debug_mode, 0); + return 0; } diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h index dda01b1..72c31a8 100644 --- a/drivers/net/wireless/ti/wlcore/wlcore.h +++ b/drivers/net/wireless/ti/wlcore/wlcore.h @@ -463,6 +463,7 @@ struct wl1271 { /* the current dfs region */ enum nl80211_dfs_regions dfs_region; + bool radar_debug_mode; /* size of the private FW status data */ size_t fw_status_len;