From patchwork Mon Jun 27 09:53:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krishna Chaitanya X-Patchwork-Id: 9200231 X-Patchwork-Delegate: johannes@sipsolutions.net 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 7752B60752 for ; Mon, 27 Jun 2016 09:53:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 672571FF10 for ; Mon, 27 Jun 2016 09:53:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5BFCE28405; Mon, 27 Jun 2016 09:53:43 +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.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID 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 D16A21FF10 for ; Mon, 27 Jun 2016 09:53:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751865AbcF0Jxk (ORCPT ); Mon, 27 Jun 2016 05:53:40 -0400 Received: from mail-pa0-f65.google.com ([209.85.220.65]:34740 "EHLO mail-pa0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751784AbcF0Jxj (ORCPT ); Mon, 27 Jun 2016 05:53:39 -0400 Received: by mail-pa0-f65.google.com with SMTP id us13so14948113pab.1 for ; Mon, 27 Jun 2016 02:53:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=NXOw31PNU3B0umVLffufUznRfLb0vMoTVBhMxLmEr3k=; b=N7C5QE0aBwjacWAMBedQ5ASLAlVye5XRknulWXS27INltTpGqxZFj2Wr8HYvGnveK2 K+EdyCALNAjna1HMui19t98NKAzMceCwU3w2mOW8RqMe3Ll0OjECDDDP9hnbDiSzPv8J R0s5BNQqYqVUtQWG7gz5438eF1eGVwDOCZQea9rizUB/WiXHcH5/TfwJ7XpeawCNt7S5 qMC7LjBfvxBwRGeYCC8lnekN5wjKxlMqj4/O62r8j6AwAoTSFVXSWHbFE1u14SzXbGb0 YE5pbL+s7JFmlSO8Zh4HE9/qvodqzDEQWLqYfzI2RITb/dKrX+xdzG7KiyLbUgjEzdgx 2snw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=NXOw31PNU3B0umVLffufUznRfLb0vMoTVBhMxLmEr3k=; b=YlplcPUHeL59eCYxlXU4gE8N0cRY6QNp+gma5FtrY8hTOZPTs004xnaH9fPt206fF5 tYiHUXZjyAqTYlWpY6thHkw1ZUt+ugN2O2yoYJDOxmFUUA7DG6ppV49b9sPUQxmmLsoS wx2AadZxM4ZbFznm+VXsxgdJntCdUdWzBqvAh2U4vxfcgTKqSRtXX9oY23ca9ApqRvoD f6G9VWtkcMw2qryGJdBEohhTtGkXOxyPxYre7bP9wJ2yhKopjgf+nKP9G2ke42lu6w4M KSJOZCAiFIleyxpSE6TJ9Dk5EJNCoJF6PH1qPT+7L6jGf0WutaLOy1ZwGV29UsG+pIeS dX3g== X-Gm-Message-State: ALyK8tI3T422NRkYz/zfLFzOnnER2Ofz6t2/T/5hcFbU2+F2LpZom0WlmnENpsw2Al5LLA== X-Received: by 10.66.248.35 with SMTP id yj3mr31905949pac.138.1467021219140; Mon, 27 Jun 2016 02:53:39 -0700 (PDT) Received: from rocky.hb.imgtec.org ([115.112.122.66]) by smtp.gmail.com with ESMTPSA id o22sm5700443pfa.15.2016.06.27.02.53.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 Jun 2016 02:53:38 -0700 (PDT) From: Chaitanya TK To: linux-wireless@vger.kernel.org, Karl Beldan , Felix Fietkau Cc: Chaitanya T K Subject: [PATCH] mac80211: minstrel: Enable STBC and LDPC for VHT Rates Date: Mon, 27 Jun 2016 15:23:26 +0530 Message-Id: <1467021206-2702-1-git-send-email-chaitanya.mgit@gmail.com> X-Mailer: git-send-email 1.7.9.5 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: Chaitanya T K If peer support reception of STBC and LDPC, enable them for better performance. Signed-off-by: Chaitanya TK --- include/linux/ieee80211.h | 1 + net/mac80211/rc80211_minstrel_ht.c | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index b118744..4d01130 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h @@ -1550,6 +1550,7 @@ struct ieee80211_vht_operation { #define IEEE80211_VHT_CAP_RXSTBC_3 0x00000300 #define IEEE80211_VHT_CAP_RXSTBC_4 0x00000400 #define IEEE80211_VHT_CAP_RXSTBC_MASK 0x00000700 +#define IEEE80211_VHT_CAP_RXSTBC_SHIFT 8 #define IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE 0x00000800 #define IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE 0x00001000 #define IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT 13 diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c index 30fbabf..e2fcdea 100644 --- a/net/mac80211/rc80211_minstrel_ht.c +++ b/net/mac80211/rc80211_minstrel_ht.c @@ -1166,13 +1166,14 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband, struct minstrel_ht_sta_priv *msp = priv_sta; struct minstrel_ht_sta *mi = &msp->ht; struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs; - u16 sta_cap = sta->ht_cap.cap; + u16 ht_cap = sta->ht_cap.cap; struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap; int use_vht; int n_supported = 0; int ack_dur; int stbc; int i; + bool ldpc; /* fall back to the old minstrel for legacy stations */ if (!sta->ht_cap.ht_supported) @@ -1210,16 +1211,24 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband, } mi->sample_tries = 4; - /* TODO tx_flags for vht - ATM the RC API is not fine-grained enough */ if (!use_vht) { - stbc = (sta_cap & IEEE80211_HT_CAP_RX_STBC) >> + stbc = (ht_cap & IEEE80211_HT_CAP_RX_STBC) >> IEEE80211_HT_CAP_RX_STBC_SHIFT; - mi->tx_flags |= stbc << IEEE80211_TX_CTL_STBC_SHIFT; - if (sta_cap & IEEE80211_HT_CAP_LDPC_CODING) - mi->tx_flags |= IEEE80211_TX_CTL_LDPC; + if (ht_cap & IEEE80211_HT_CAP_LDPC_CODING) + ldpc = true; + } else { + stbc = (vht_cap->cap & IEEE80211_VHT_CAP_RXSTBC_MASK) >> + IEEE80211_VHT_CAP_RXSTBC_SHIFT; + + if (vht_cap->cap & IEEE80211_VHT_CAP_RXLDPC) + ldpc = true; } + mi->tx_flags |= stbc << IEEE80211_TX_CTL_STBC_SHIFT; + if (ldpc) + mi->tx_flags |= IEEE80211_TX_CTL_LDPC; + for (i = 0; i < ARRAY_SIZE(mi->groups); i++) { u32 gflags = minstrel_mcs_groups[i].flags; int bw, nss; @@ -1232,10 +1241,10 @@ minstrel_ht_update_caps(void *priv, struct ieee80211_supported_band *sband, if (gflags & IEEE80211_TX_RC_SHORT_GI) { if (gflags & IEEE80211_TX_RC_40_MHZ_WIDTH) { - if (!(sta_cap & IEEE80211_HT_CAP_SGI_40)) + if (!(ht_cap & IEEE80211_HT_CAP_SGI_40)) continue; } else { - if (!(sta_cap & IEEE80211_HT_CAP_SGI_20)) + if (!(ht_cap & IEEE80211_HT_CAP_SGI_20)) continue; } }