From patchwork Mon Jun 12 15:03:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erik Stromdahl X-Patchwork-Id: 9781335 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 9D24A60212 for ; Mon, 12 Jun 2017 15:04:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8875726E51 for ; Mon, 12 Jun 2017 15:04:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7D59028633; Mon, 12 Jun 2017 15:04:03 +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=-1.9 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0558326E51 for ; Mon, 12 Jun 2017 15:04:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=l7Cd9xY8mrh5Gd6iY7PYJVgec25I3ERF2QEIUUP0piY=; b=c3gz2D6KGfLD7WB6KS1Fg0otFP S00fsWPrM8pFHhK+L0wjxVbCNUTBAfsd5/TVvVGcbP/syHi3r2s/bB1QVlo/DQQ49KzYIgNyc3jv2 guq4JZ44DaeMogV/Hb01NvaLKiyAMSD0BqsN6pYeF/JrmqFHRgkCcNPKBRrrVhE4PPRLA8AQvuEPk 7F7MU4excjd2ITB1RIy9m9BDvtm06lTl6E2dLcOI/ieNtZ/Z95ZT51U4X+QfOKHWsh5sMS7WY8Mhe VfLkYEKdCgpm/zTJygTBzLBNdSZrO3LBL7LowTcMitTXtXvt2ZrMPEY2vm3inFFbbat9U2+SoUkOd lQ40rqbQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1dKQsn-0007aG-O0; Mon, 12 Jun 2017 15:03:57 +0000 Received: from mail-lf0-x241.google.com ([2a00:1450:4010:c07::241]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dKQsZ-0007Gb-B1 for ath10k@lists.infradead.org; Mon, 12 Jun 2017 15:03:46 +0000 Received: by mail-lf0-x241.google.com with SMTP id v20so9679846lfa.2 for ; Mon, 12 Jun 2017 08:03:22 -0700 (PDT) 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=2/N+soRxZPJHeVZvGe4DMvXP7V6MBvQmh9N5dRkUwvk=; b=fgauyf6vWoNvw6PTHMsDWijdikZT+dM+xn//k7me2FkxcuezJ5eepFlbamEvnb4cqY NFf1+0yVIVLxCC9kkmDLspm4TJHgx/rJiw41aHoZM3AbVm2rLkptiAwXoXsgfhjDe5Ch PgXhZ10JgKlaTWVFHTjY5ciR/1cM1xCKyWhqomjYE+V5/WqQ7L2mBmpGPPQy1/3pY+i1 +//Hh6HwoKHGSug3DpqEaY+ZVkjMK4iJEZ5HYqm6d0aPIUcKk1BBkUpV+l5wW1xmZfJT lNo9GVBkKSdQBsYOKRRhxpW9fbwYb0ikoFGg89eORSYPRtoL2A7OEJtl6GZcj8Xn6Pa6 DZpQ== 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=2/N+soRxZPJHeVZvGe4DMvXP7V6MBvQmh9N5dRkUwvk=; b=Zbb19vBnpL5W3eOGroVcqRGL8sI+I9uTEbMlHg04cucKYXrW5bPFGajsIauyX3MCRW 0yyfGqjJYhhVcwXmCtw74DO0P5dYOX122xKmcKfBP9d0kBEOrSpbANEI1fWPzFDUwu26 Mnv9HAM8mAfd0yPGgVhB/U8vRqr/DhAr25A+v9gdL2uOrpwu8Cs7KcCq0/qSx8HBnOMQ BYIFcJAquN4/jO472jxNjLDpcObiS3fUmb5IiNMksX1SJ4O2ngdR+RnsLnmBsAS+eRCV q3xn51vOvv6chGr6FdwEbIU054XqCytTt/3w8ztkPAjEREjT9U1CdSY8xKWU7uNhj4U2 bLnw== X-Gm-Message-State: AODbwcBwS64nf1gnA5U4i9qQMGwobQVoYgBCt1u4V+H52OeZB7fk1kBF 2H1ei9zeROLirrhs X-Received: by 10.25.145.15 with SMTP id t15mr8208355lfd.65.1497279801194; Mon, 12 Jun 2017 08:03:21 -0700 (PDT) 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 n71sm2709253lje.14.2017.06.12.08.03.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 12 Jun 2017 08:03:20 -0700 (PDT) From: Erik Stromdahl To: kvalo@qca.qualcomm.com, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org Subject: [RFC v2 02/10] ath10k: htt: RX ring config HL support Date: Mon, 12 Jun 2017 17:03:03 +0200 Message-Id: <1497279791-9598-3-git-send-email-erik.stromdahl@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1497279791-9598-1-git-send-email-erik.stromdahl@gmail.com> References: <1497279791-9598-1-git-send-email-erik.stromdahl@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170612_080343_761848_5309E690 X-CRM114-Status: GOOD ( 12.79 ) X-BeenThere: ath10k@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Erik Stromdahl MIME-Version: 1.0 Sender: "ath10k" Errors-To: ath10k-bounces+patchwork-ath10k=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Special HTT RX ring config message used by high latency devices. The main difference between HL and LL is that HL devices do not use shared memory between device and host and thus, no host paddr's are added to the RX config message. Signed-off-by: Erik Stromdahl --- drivers/net/wireless/ath/ath10k/htt.c | 5 +++- drivers/net/wireless/ath/ath10k/htt.h | 1 + drivers/net/wireless/ath/ath10k/htt_tx.c | 51 ++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath10k/htt.c b/drivers/net/wireless/ath/ath10k/htt.c index cd160b1..29ed4af 100644 --- a/drivers/net/wireless/ath/ath10k/htt.c +++ b/drivers/net/wireless/ath/ath10k/htt.c @@ -258,7 +258,10 @@ int ath10k_htt_setup(struct ath10k_htt *htt) if (status) return status; - status = ath10k_htt_send_rx_ring_cfg_ll(htt); + if (ar->is_high_latency) + status = ath10k_htt_send_rx_ring_cfg_hl(htt); + else + status = ath10k_htt_send_rx_ring_cfg_ll(htt); if (status) { ath10k_warn(ar, "failed to setup rx ring: %d\n", status); diff --git a/drivers/net/wireless/ath/ath10k/htt.h b/drivers/net/wireless/ath/ath10k/htt.h index 6305308..7ffa1d4 100644 --- a/drivers/net/wireless/ath/ath10k/htt.h +++ b/drivers/net/wireless/ath/ath10k/htt.h @@ -1805,6 +1805,7 @@ int ath10k_htt_h2t_ver_req_msg(struct ath10k_htt *htt); int ath10k_htt_h2t_stats_req(struct ath10k_htt *htt, u8 mask, u64 cookie); int ath10k_htt_send_frag_desc_bank_cfg(struct ath10k_htt *htt); int ath10k_htt_send_rx_ring_cfg_ll(struct ath10k_htt *htt); +int ath10k_htt_send_rx_ring_cfg_hl(struct ath10k_htt *htt); int ath10k_htt_h2t_aggr_cfg_msg(struct ath10k_htt *htt, u8 max_subfrms_ampdu, u8 max_subfrms_amsdu); diff --git a/drivers/net/wireless/ath/ath10k/htt_tx.c b/drivers/net/wireless/ath/ath10k/htt_tx.c index 685faac..8d85f82 100644 --- a/drivers/net/wireless/ath/ath10k/htt_tx.c +++ b/drivers/net/wireless/ath/ath10k/htt_tx.c @@ -693,6 +693,57 @@ int ath10k_htt_send_rx_ring_cfg_ll(struct ath10k_htt *htt) return 0; } +int ath10k_htt_send_rx_ring_cfg_hl(struct ath10k_htt *htt) +{ + struct ath10k *ar = htt->ar; + struct sk_buff *skb; + struct htt_cmd *cmd; + struct htt_rx_ring_setup_ring *ring; + const int num_rx_ring = 1; + u16 flags; + int len; + int ret; + + /* + * the HW expects the buffer to be an integral number of 4-byte + * "words" + */ + BUILD_BUG_ON(!IS_ALIGNED(HTT_RX_BUF_SIZE, 4)); + BUILD_BUG_ON((HTT_RX_BUF_SIZE & HTT_MAX_CACHE_LINE_SIZE_MASK) != 0); + + len = sizeof(cmd->hdr) + sizeof(cmd->rx_setup.hdr) + + (sizeof(*ring) * num_rx_ring); + skb = ath10k_htc_alloc_skb(ar, len); + if (!skb) + return -ENOMEM; + + skb_put(skb, len); + + cmd = (struct htt_cmd *)skb->data; + ring = &cmd->rx_setup.rings[0]; + + cmd->hdr.msg_type = HTT_H2T_MSG_TYPE_RX_RING_CFG; + cmd->rx_setup.hdr.num_rings = 1; + + flags = 0; + flags |= HTT_RX_RING_FLAGS_MSDU_PAYLOAD; + flags |= HTT_RX_RING_FLAGS_UNICAST_RX; + flags |= HTT_RX_RING_FLAGS_MULTICAST_RX; + + memset(ring, 0, sizeof(*ring)); + ring->rx_ring_len = __cpu_to_le16(HTT_RX_RING_SIZE_MIN); + ring->rx_ring_bufsize = __cpu_to_le16(HTT_RX_BUF_SIZE); + ring->flags = __cpu_to_le16(flags); + + ret = ath10k_htc_send(&htt->ar->htc, htt->eid, skb); + if (ret) { + dev_kfree_skb_any(skb); + return ret; + } + + return 0; +} + int ath10k_htt_h2t_aggr_cfg_msg(struct ath10k_htt *htt, u8 max_subfrms_ampdu, u8 max_subfrms_amsdu)