Received: by 2002:a17:90a:88:0:0:0:0 with SMTP id a8csp59342pja; Fri, 22 Nov 2019 03:26:21 -0800 (PST) X-Google-Smtp-Source: APXvYqzvXim2rv1hYc9Xy0WakfK1KFHnWKEwpSTDDQ+AgCNO8WESxE/493tsUP1Zth2Jb2g8iENd X-Received: by 2002:aa7:df87:: with SMTP id b7mr413552edy.296.1574421980897; Fri, 22 Nov 2019 03:26:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574421980; cv=none; d=google.com; s=arc-20160816; b=zY0AvcDKP3rnPTrStZX/bmXrfpSA7DqM8xrhlSoV5miWu/UZAEt9lXYJykNQblDJM+ SBZH9MGjwUOaGQr2UQKG4p0CsV/MQHi/VuI7VZdbfWzGPLqpXFCOnfCDxi29C1d7JHij HVLMGRw4rKnuqVaRQ9gOom/Yq169sqqFwhX05Lp19cp7MN6/vpoS5CmCTn9kpNhlOSi2 YEJMse4ZYtPyJ/XD5flfLTrN3pnLUqvIhJz/efBv/YhbYRbgmjDxaeuTpernpa8l38vj Vj8Hg2od8pLvrxo7rv9tdixjdXAHbOE3EbVFuJWcTNSKSA2Y8tBPzdl1ZB7a1QMsCaDg I1hQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=XZitaAW9GNAMaXEe4IkdFGPc+/4D7nndQrgQ7hCF8xw=; b=pziuZn8hLoKAQVm4coJY7mqcWUUy6ZSFGOsWYOT+huvuaSr7REK2/Kx7NmCiyfsOm0 /FfEoPoY5obT6XVfyHFJGICYV9Lfp9v5JT24N6AXu2eLVhB6KGjdxcUhgS7rvm9gAXmd scSSPRVD5ZBnu0CNdXZn0swyHUTyCsbi1KBRKu8n1oZj1kgUTaqffkaABuzYsmd8NQtQ 15YTGnRXuxmz5xLXYsaJcCH+i4rCU/2P5TcTyuMuYjPvqtx82b5kgJkzvPY154fUtwGM 5gX4MterRJGShodPGuS5l6bkD2u3r1Jjv8n5N+9PhJU9UReswcwCaotAYoU8LdkorrSn rFjA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=O5LYI1Wz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e1si3995553ejt.319.2019.11.22.03.25.56; Fri, 22 Nov 2019 03:26:20 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=O5LYI1Wz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729658AbfKVLXd (ORCPT + 99 others); Fri, 22 Nov 2019 06:23:33 -0500 Received: from mail.kernel.org ([198.145.29.99]:45368 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728970AbfKVKlD (ORCPT ); Fri, 22 Nov 2019 05:41:03 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A294420715; Fri, 22 Nov 2019 10:41:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574419262; bh=Kahgey2BXK9558I9dynuhjHSzq1L5lj1vi1iv57xIpk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O5LYI1WzFQRgqR+hXSwg/rDegpt84Dm6FBtffc8yB0dkuNtZzMvlKAfvO+UpEdRNf UCaDfFq2NUc5rb6bEvvLMfMnPMm8Cta0bdXXVi3IVv8uMr+0Z5hHJi38XZzbUolXyn Hxf61bl/7F186VU7nf5AbqG78VnDCfaCBAEN2RuU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Felix Fietkau , Kalle Valo , Sasha Levin Subject: [PATCH 4.9 051/222] ath9k: add back support for using active monitor interfaces for tx99 Date: Fri, 22 Nov 2019 11:26:31 +0100 Message-Id: <20191122100854.810911364@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191122100830.874290814@linuxfoundation.org> References: <20191122100830.874290814@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Felix Fietkau [ Upstream commit 6df0580be8bc30803c4d8b2ed9c2230a2740c795 ] Various documented examples on how to set up tx99 with ath9k rely on setting up a regular monitor interface for setting the channel. My previous patch "ath9k: fix tx99 with monitor mode interface" made it possible to set it up this way again. However, it was removing support for using an active monitor interface, which is required for controlling the bitrate as well, since the bitrate is not passed down with a regular monitor interface. This patch partially reverts the previous one, but keeps support for using a regular monitor interface to keep documented steps working in cases where the bitrate does not matter Fixes: d9c52fd17cb48 ("ath9k: fix tx99 with monitor mode interface") Signed-off-by: Felix Fietkau Signed-off-by: Kalle Valo Signed-off-by: Sasha Levin --- drivers/net/wireless/ath/ath9k/ath9k.h | 1 + drivers/net/wireless/ath/ath9k/main.c | 10 ++++++++-- drivers/net/wireless/ath/ath9k/tx99.c | 7 +++++++ drivers/net/wireless/ath/ath9k/xmit.c | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 51e878a9d5211..7bda18c61eb6e 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h @@ -1033,6 +1033,7 @@ struct ath_softc { struct ath_spec_scan_priv spec_priv; + struct ieee80211_vif *tx99_vif; struct sk_buff *tx99_skb; bool tx99_state; s16 tx99_power; diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index fbc34beee1580..f6151a00041d6 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -1249,8 +1249,13 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, struct ath_vif *avp = (void *)vif->drv_priv; struct ath_node *an = &avp->mcast_node; - if (IS_ENABLED(CONFIG_ATH9K_TX99)) - return -EOPNOTSUPP; + if (IS_ENABLED(CONFIG_ATH9K_TX99)) { + if (sc->cur_chan->nvifs >= 1) { + mutex_unlock(&sc->mutex); + return -EOPNOTSUPP; + } + sc->tx99_vif = vif; + } mutex_lock(&sc->mutex); @@ -1335,6 +1340,7 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw, ath9k_p2p_remove_vif(sc, vif); sc->cur_chan->nvifs--; + sc->tx99_vif = NULL; if (!ath9k_is_chanctx_enabled()) list_del(&avp->list); diff --git a/drivers/net/wireless/ath/ath9k/tx99.c b/drivers/net/wireless/ath/ath9k/tx99.c index 0cb5b2a873be8..096902e0fdf5c 100644 --- a/drivers/net/wireless/ath/ath9k/tx99.c +++ b/drivers/net/wireless/ath/ath9k/tx99.c @@ -54,6 +54,7 @@ static struct sk_buff *ath9k_build_tx99_skb(struct ath_softc *sc) struct ieee80211_hdr *hdr; struct ieee80211_tx_info *tx_info; struct sk_buff *skb; + struct ath_vif *avp; skb = alloc_skb(len, GFP_KERNEL); if (!skb) @@ -71,11 +72,17 @@ static struct sk_buff *ath9k_build_tx99_skb(struct ath_softc *sc) memcpy(hdr->addr2, hw->wiphy->perm_addr, ETH_ALEN); memcpy(hdr->addr3, hw->wiphy->perm_addr, ETH_ALEN); + if (sc->tx99_vif) { + avp = (struct ath_vif *) sc->tx99_vif->drv_priv; + hdr->seq_ctrl |= cpu_to_le16(avp->seq_no); + } + tx_info = IEEE80211_SKB_CB(skb); memset(tx_info, 0, sizeof(*tx_info)); rate = &tx_info->control.rates[0]; tx_info->band = sc->cur_chan->chandef.chan->band; tx_info->flags = IEEE80211_TX_CTL_NO_ACK; + tx_info->control.vif = sc->tx99_vif; rate->count = 1; if (ah->curchan && IS_CHAN_HT(ah->curchan)) { rate->flags |= IEEE80211_TX_RC_MCS; diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 2c35819f65426..0ef27d99bef33 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c @@ -2970,7 +2970,7 @@ int ath9k_tx99_send(struct ath_softc *sc, struct sk_buff *skb, return -EINVAL; } - ath_set_rates(NULL, NULL, bf); + ath_set_rates(sc->tx99_vif, NULL, bf); ath9k_hw_set_desc_link(sc->sc_ah, bf->bf_desc, bf->bf_daddr); ath9k_hw_tx99_start(sc->sc_ah, txctl->txq->axq_qnum); -- 2.20.1