From patchwork Fri Mar 7 13:37:54 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rostislav Lisovy X-Patchwork-Id: 3791601 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.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id B3F5FBF540 for ; Fri, 7 Mar 2014 13:38:49 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 10EB5202BE for ; Fri, 7 Mar 2014 13:38:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E7C9720265 for ; Fri, 7 Mar 2014 13:38:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753469AbaCGNiT (ORCPT ); Fri, 7 Mar 2014 08:38:19 -0500 Received: from mail-ea0-f171.google.com ([209.85.215.171]:48232 "EHLO mail-ea0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753449AbaCGNiO (ORCPT ); Fri, 7 Mar 2014 08:38:14 -0500 Received: by mail-ea0-f171.google.com with SMTP id n15so2318384ead.2 for ; Fri, 07 Mar 2014 05:38:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=9LRjVlJRIcrE6DrNTvdtLMOMHb2u9fXSZlTej0LsUWU=; b=O5r5/fQivaiHYXiJ/WxABj8WaD1JxigjQmU/uUK3lvxhva2E+QnTKTuJvQmVamPE5n AVc7dSMXZDaQUNK6suIECoPLyqU+/M/k3tGYHPTHKcwXWWRdf/9uK0/ODA4qslVzxnpe 1bs3UgPnTjhVpJEqdYYNdJfJiXfUrFBCon6mE5OfPCL5RvPX9P8EB2gMV0hWIchfYZwX WnAcxj4BYTQ58yRwxMXEQ8X1KFsm/hXg/rKArq2Q9h5mdlDPjMWN/0iWtQA6nPiaU4KX seXuYjofXIDY7ndA/7YIvRULlDfF2v3Aa3Mo+iqAUyEL2vqJYImQ22RJWPxHivnyYcDo /K/Q== X-Received: by 10.14.109.71 with SMTP id r47mr19150960eeg.6.1394199493816; Fri, 07 Mar 2014 05:38:13 -0800 (PST) Received: from c2c-vostro1.felk.cvut.cz ([147.32.86.166]) by mx.google.com with ESMTPSA id 48sm6764355eee.2.2014.03.07.05.38.12 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 07 Mar 2014 05:38:12 -0800 (PST) From: Rostislav Lisovy To: Johannes Berg , linux-wireless@vger.kernel.org Cc: Michal Sojka , s.sander@nordsys.de, jan-niklas.meier@volkswagen.de Subject: [RFC PATCH 7/8] cfg80211: Use 5MHz bandwidth when checking usable channels Date: Fri, 7 Mar 2014 14:37:54 +0100 Message-Id: <1394199475-5208-8-git-send-email-rostislav.lisovy@fel.cvut.cz> X-Mailer: git-send-email 1.8.5.1 In-Reply-To: <1394199475-5208-1-git-send-email-rostislav.lisovy@fel.cvut.cz> References: <1394199475-5208-1-git-send-email-rostislav.lisovy@fel.cvut.cz> 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_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, T_RP_MATCHES_RCVD, 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 Current code checks if the 20MHz BW is allowed for particular channel -- if it is not, the channel is disabled. Since we need to use 5/10 MHz channels, this code is modified in the way that the default BW to check is 5MHz. If 5MHz is greater than the maximum bandwidth supported by the channel, the channel is disabled. If it is smaller than the maximum BW, the channel is used and the flags are set according to the BW supported by the channel. Signed-off-by: Rostislav Lisovy --- net/wireless/reg.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 9b897fc..582e623 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -805,7 +805,7 @@ freq_reg_info_regd(struct wiphy *wiphy, u32 center_freq, if (!band_rule_found) band_rule_found = freq_in_rule_band(fr, center_freq); - bw_fits = reg_does_bw_fit(fr, center_freq, MHZ_TO_KHZ(20)); + bw_fits = reg_does_bw_fit(fr, center_freq, MHZ_TO_KHZ(5)); if (band_rule_found && bw_fits) return rr; @@ -888,10 +888,10 @@ static void chan_reg_rule_print_dbg(struct ieee80211_channel *chan, } #endif -/* - * Note that right now we assume the desired channel bandwidth - * is always 20 MHz for each individual channel (HT40 uses 20 MHz - * per channel, the primary and the extension channel). +/* Find an ieee80211_reg_rule such that a 5MHz channel with frequency + * @chan->center_freq fits there. + * If there is no such reg_rule, disable the channel, otherwise set the + * flags corresponding to the bandwidths allowed in the particular reg_rule */ static void handle_channel(struct wiphy *wiphy, enum nl80211_reg_initiator initiator, @@ -944,8 +944,12 @@ static void handle_channel(struct wiphy *wiphy, power_rule = ®_rule->power_rule; freq_range = ®_rule->freq_range; + if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(10)) + bw_flags |= IEEE80211_CHAN_NO_10MHZ; + if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(20)) + bw_flags |= IEEE80211_CHAN_NO_20MHZ; if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(40)) - bw_flags = IEEE80211_CHAN_NO_HT40; + bw_flags |= IEEE80211_CHAN_NO_HT40; if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(80)) bw_flags |= IEEE80211_CHAN_NO_80MHZ; if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(160)) @@ -1351,8 +1355,12 @@ static void handle_channel_custom(struct wiphy *wiphy, power_rule = ®_rule->power_rule; freq_range = ®_rule->freq_range; + if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(10)) + bw_flags |= IEEE80211_CHAN_NO_10MHZ; + if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(20)) + bw_flags |= IEEE80211_CHAN_NO_20MHZ; if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(40)) - bw_flags = IEEE80211_CHAN_NO_HT40; + bw_flags |= IEEE80211_CHAN_NO_HT40; if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(80)) bw_flags |= IEEE80211_CHAN_NO_80MHZ; if (freq_range->max_bandwidth_khz < MHZ_TO_KHZ(160))