From patchwork Mon Feb 29 21:50:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 8460831 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: X-Original-To: patchwork-ath10k@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 4DB7DC0553 for ; Tue, 1 Mar 2016 02:00:37 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 61EFE201C8 for ; Tue, 1 Mar 2016 02:00:36 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 84ACA2017D for ; Tue, 1 Mar 2016 02:00:35 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1aaZbo-0003Ff-VI; Tue, 01 Mar 2016 02:00:20 +0000 Received: from merlin.infradead.org ([2001:4978:20e::2]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1aaZbn-0003F9-Qy for ath10k@bombadil.infradead.org; Tue, 01 Mar 2016 02:00:19 +0000 Received: from mail2.candelatech.com ([208.74.158.173]) by merlin.infradead.org with esmtp (Exim 4.85 #2 (Red Hat Linux)) id 1aaZbm-0007cy-Ay for ath10k@lists.infradead.org; Tue, 01 Mar 2016 02:00:18 +0000 Received: from ben-dt3.candelatech.com (firewall.candelatech.com [50.251.239.81]) by mail2.candelatech.com (Postfix) with ESMTP id 9EE4A40BC31; Mon, 29 Feb 2016 13:50:58 -0800 (PST) From: greearb@candelatech.com To: ath10k@lists.infradead.org Subject: [PATCH] ath10k: Fix mgmt tx status for 10.4.3 firmware. Date: Mon, 29 Feb 2016 13:50:54 -0800 Message-Id: <1456782654-24723-1-git-send-email-greearb@candelatech.com> X-Mailer: git-send-email 2.4.3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160229_210018_454137_193F8656 X-CRM114-Status: UNSURE ( 9.31 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -1.9 (-) X-BeenThere: ath10k@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ben Greear , linux-wireless@vger.kernel.org MIME-Version: 1.0 Sender: "ath10k" Errors-To: ath10k-bounces+patchwork-ath10k=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable 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 From: Ben Greear When testing a 10.4.3 firmware in station mode, I notice that when the AP is powered down, the ath10k does not notice AP is gone because mgt frames get tx status of 3, which is not handled. It appears that status 3 means something similar to failed-retry. Treating it thus lets the station disconnect properly. Tested against a non-stock 10.4.3 firmware, but likely upstream firmware acts similarly in this case. Signed-off-by: Ben Greear --- This patch is against a heavily patched tree based on 4.4, hopefully it can be applied to upstream code w/out too much trouble. Someone should verify this on stock 10.4-ish firmware before applying. drivers/net/wireless/ath/ath10k/htt.h | 4 +++- drivers/net/wireless/ath/ath10k/htt_rx.c | 11 +++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/htt.h b/drivers/net/wireless/ath/ath10k/htt.h index c31a31f..de663a6 100644 --- a/drivers/net/wireless/ath/ath10k/htt.h +++ b/drivers/net/wireless/ath/ath10k/htt.h @@ -309,7 +309,9 @@ struct htt_mgmt_tx_desc { enum htt_mgmt_tx_status { HTT_MGMT_TX_STATUS_OK = 0, HTT_MGMT_TX_STATUS_RETRY = 1, - HTT_MGMT_TX_STATUS_DROP = 2 + HTT_MGMT_TX_STATUS_DROP = 2, + HTT_MGMT_TX_STATUS_TXFILT = 3 /* Seems to be logically similar to + RETRY failure. */ }; /*=== target -> host messages ===============================================*/ diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c index 2953aa7..88918ab 100644 --- a/drivers/net/wireless/ath/ath10k/htt_rx.c +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c @@ -1721,8 +1721,10 @@ static void ath10k_htt_rx_frm_tx_compl(struct ath10k *ar, break; } - ath10k_dbg(ar, ATH10K_DBG_HTT, "htt tx completion num_msdus %d\n", - resp->data_tx_completion.num_msdus); + ath10k_dbg(ar, ATH10K_DBG_HTT, + "htt tx completion num_msdus %d status: %d discard: %d no-ack: %d\n", + resp->data_tx_completion.num_msdus, status, + (int)tx_done.discard, (int)tx_done.no_ack); if (test_bit(ATH10K_FW_FEATURE_TXRATE_CT, ar->fw_features) && ar->wmi.op_version != ATH10K_FW_WMI_OP_VERSION_10_4) { @@ -2406,6 +2408,7 @@ void ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb) tx_done.success = true; break; case HTT_MGMT_TX_STATUS_RETRY: + case HTT_MGMT_TX_STATUS_TXFILT: tx_done.no_ack = true; break; case HTT_MGMT_TX_STATUS_DROP: @@ -2413,6 +2416,10 @@ void ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb) break; } + ath10k_dbg(ar, ATH10K_DBG_HTT, + "mgmt-tx-completion, status: %d discard: %d no-ack: %d\n", + status, (int)tx_done.discard, (int)tx_done.no_ack); + ath10k_txrx_tx_unref(htt, &tx_done); ath10k_mac_tx_push_pending(ar); break;