From patchwork Tue Feb 21 16:15:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erik Stromdahl X-Patchwork-Id: 9585023 X-Patchwork-Delegate: kvalo@adurom.com 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 55BAA6042F for ; Tue, 21 Feb 2017 16:16:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3D6FE28582 for ; Tue, 21 Feb 2017 16:16:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 32651285DD; Tue, 21 Feb 2017 16:16:48 +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.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM 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 CF42D28582 for ; Tue, 21 Feb 2017 16:16:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753796AbdBUQQp (ORCPT ); Tue, 21 Feb 2017 11:16:45 -0500 Received: from mail-lf0-f67.google.com ([209.85.215.67]:35646 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753740AbdBUQQ1 (ORCPT ); Tue, 21 Feb 2017 11:16:27 -0500 Received: by mail-lf0-f67.google.com with SMTP id z127so9537200lfa.2 for ; Tue, 21 Feb 2017 08:16:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=h+fsgDgH4lARBMjCCDUkSg0hr7okw7I/sujtnjdctFE=; b=DTrb+6wc6k5zJFydyKmY9DfNoafwZg/cS5QvL+oKzTbUL9pxn8WNKGcT0sSJQsT4i2 gQI+KKNqdOQEAIwLsWIDu2+n9ok7uz84epS+x5bOBkm0GVl5sAHkYti18f0IysakOpDb /kkyebPAr4ZFaLrCOqB24MQh+vsthYkNqfPstpPDmLkMh5m98PIsaFqwio5x9Cew7hXH dP+eH73uU9dvZZMxR6n7kIdhzWKY+DvvrbOOxuE3KEXkurLDU77KePWNmJBRZeug4WEF o0sy5qKFATonJ+BPjW/Umtb409N/Y+H9wQQIOeFkH/ElupMAOBvenAQyhJS5pnx38H0S wDCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=h+fsgDgH4lARBMjCCDUkSg0hr7okw7I/sujtnjdctFE=; b=fSqM690wNB3RsOi1mUZiRb8hA0Y7pU4VEzHAZLWT7pppVnuhbO3JjZbZyTqpGCSKAh q+itXNJYygF/38rT4AaAGbCvNPcTB/vN94MvRTvKTr9fEN+9f4oBNuZAVeY0xb8C7n6r piiWgut0WcIp506hIz8CH7gL7hoNZDFLTGntOJUq6R+FhO4/bms54Cxn+I+vfGCBGis/ Un+lwDl0dDvRroU4vGm1vDZBxxD66bRbZXBNMuoVhAI2hJ0CGZDK6cEHu4JY5x/GIAaV 0Y3UN4xR2BXw+8i0jUwvoXp9h3gknpU/CJR4ELhZetFlm9E7eB8Nl64wLbnmMLxpyEwS /X/w== X-Gm-Message-State: AMke39kjpr61UNFuipKiN5z7Um9cpnjeI+bjRl3xVAb2Q/XvCFXs+qtMTH4A8Gj+otWi6A== X-Received: by 10.46.77.147 with SMTP id c19mr6559528ljd.105.1487693780849; Tue, 21 Feb 2017 08:16:20 -0800 (PST) Received: from erik-mate-1604.lan (90-227-62-61-no75.tbcn.telia.com. [90.227.62.61]) by smtp.gmail.com with ESMTPSA id t29sm6336069ljd.39.2017.02.21.08.16.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 21 Feb 2017 08:16:20 -0800 (PST) From: Erik Stromdahl To: kvalo@qca.qualcomm.com, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org Cc: Erik Stromdahl Subject: [RFC v4 09/21] ath10k: htc: ready_ext msg support Date: Tue, 21 Feb 2017 17:15:29 +0100 Message-Id: <1487693741-10042-10-git-send-email-erik.stromdahl@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1487693741-10042-1-git-send-email-erik.stromdahl@gmail.com> References: <1487693741-10042-1-git-send-email-erik.stromdahl@gmail.com> 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 Added support for extended ready message. The extended ready message contains the maximum bundle count supported by SDIO chipsets. It is transmitted by SDIO chipset only and replaces the "standard" ready message in this case. Signed-off-by: Erik Stromdahl --- drivers/net/wireless/ath/ath10k/htc.c | 28 ++++++++++++++++++++++------ drivers/net/wireless/ath/ath10k/htc.h | 5 +++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/htc.c b/drivers/net/wireless/ath/ath10k/htc.c index eb036b3..3eaa9a8 100644 --- a/drivers/net/wireless/ath/ath10k/htc.c +++ b/drivers/net/wireless/ath/ath10k/htc.c @@ -581,8 +581,6 @@ int ath10k_htc_wait_target(struct ath10k_htc *htc) unsigned long time_left; struct ath10k_htc_msg *msg; u16 message_id; - u16 credit_count; - u16 credit_size; time_left = wait_for_completion_timeout(&htc->ctl_resp, ATH10K_HTC_WAIT_TIMEOUT_HZ); @@ -619,16 +617,14 @@ int ath10k_htc_wait_target(struct ath10k_htc *htc) msg = (struct ath10k_htc_msg *)htc->control_resp_buffer; message_id = __le16_to_cpu(msg->hdr.message_id); - credit_count = __le16_to_cpu(msg->ready.credit_count); - credit_size = __le16_to_cpu(msg->ready.credit_size); if (message_id != ATH10K_HTC_MSG_READY_ID) { ath10k_err(ar, "Invalid HTC ready msg: 0x%x\n", message_id); return -ECOMM; } - htc->total_transmit_credits = credit_count; - htc->target_credit_size = credit_size; + htc->total_transmit_credits = __le16_to_cpu(msg->ready.credit_count); + htc->target_credit_size = __le16_to_cpu(msg->ready.credit_size); ath10k_dbg(ar, ATH10K_DBG_HTC, "Target ready! transmit resources: %d size:%d\n", @@ -641,6 +637,19 @@ int ath10k_htc_wait_target(struct ath10k_htc *htc) return -ECOMM; } + /* The only way to determine if the ready message is an extended + * message is from the size. + */ + if (htc->control_resp_len >= + sizeof(msg->hdr) + sizeof(msg->ready_ext)) { + htc->max_msgs_per_htc_bundle = + min_t(u8, msg->ready_ext.max_msgs_per_htc_bundle, + HTC_HOST_MAX_MSG_PER_BUNDLE); + ath10k_dbg(ar, ATH10K_DBG_HTC, + "Extended ready message. RX bundle size: %d\n", + htc->max_msgs_per_htc_bundle); + } + return 0; } @@ -836,6 +845,13 @@ int ath10k_htc_start(struct ath10k_htc *htc) msg->hdr.message_id = __cpu_to_le16(ATH10K_HTC_MSG_SETUP_COMPLETE_EX_ID); + if (ar->hif.bus == ATH10K_BUS_SDIO) { + /* Extra setup params used by SDIO */ + msg->setup_complete_ext.flags = + __cpu_to_le32(ATH10K_HTC_SETUP_COMPLETE_FLAGS_RX_BNDL_EN); + msg->setup_complete_ext.max_msgs_per_bundled_recv = + htc->max_msgs_per_htc_bundle; + } ath10k_dbg(ar, ATH10K_DBG_HTC, "HTC is using TX credit flow control\n"); status = ath10k_htc_send(htc, ATH10K_HTC_EP_0, skb); diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h index 9a1db90..566e437 100644 --- a/drivers/net/wireless/ath/ath10k/htc.h +++ b/drivers/net/wireless/ath/ath10k/htc.h @@ -112,6 +112,10 @@ enum ath10k_htc_conn_svc_status { ATH10K_HTC_CONN_SVC_STATUS_NO_MORE_EP = 4 }; +enum ath10k_htc_setup_complete_flags { + ATH10K_HTC_SETUP_COMPLETE_FLAGS_RX_BNDL_EN = 1 +}; + struct ath10k_ath10k_htc_msg_hdr { __le16 message_id; /* @enum htc_message_id */ } __packed; @@ -360,6 +364,7 @@ struct ath10k_htc { int total_transmit_credits; int target_credit_size; + u8 max_msgs_per_htc_bundle; }; int ath10k_htc_init(struct ath10k *ar);