From patchwork Sun May 21 19:59:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erik Stromdahl X-Patchwork-Id: 9739259 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 B0C8760326 for ; Sun, 21 May 2017 20:02:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9F62C285E2 for ; Sun, 21 May 2017 20:02:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9421328692; Sun, 21 May 2017 20:02:00 +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=ham 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 30900285E2 for ; Sun, 21 May 2017 20:01:59 +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=g3K+1xGCpNkB+J7WyDvbrxaAPW woN1uIL5ZdD3P4gJIRTdgixEn7Ahmb8ZsGvV9VzfNmq30k6CVRwGdCyus21/JQfiK+7risVMJwnDo sJh60Cg6hg7KwnaT5mioXwHf71D4YCdRaQsnz97qdqHl1UOv64Iq1w+tOCYPnfeeCHL9MXlwy1iJS KXajBcDvkPAZs09P08ap3pwzOzRzLi8pa/56p3Vp6Dtg7pnjjv7ISSTOtGzCtv3NJ9zz546SHI4N7 Y8o1s/WGKOpbPNivB/lF0FmNfSLkYR1IRnm2SDqMzDrVxwCwD20bZc42eaw4xaYYl8SHdFdwYPT62 yuPFLwsg==; 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 1dCX2x-000294-7J; Sun, 21 May 2017 20:01:47 +0000 Received: from mail-lf0-x242.google.com ([2a00:1450:4010:c07::242]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dCX2r-00022Z-8A for ath10k@lists.infradead.org; Sun, 21 May 2017 20:01:43 +0000 Received: by mail-lf0-x242.google.com with SMTP id q24so3696093lfb.1 for ; Sun, 21 May 2017 13:01:21 -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=A2zRnNOjmrgvp/UUVszHsJLBuPcOAD1X6G1Vqv8oPxeE0Tns96xsEUAR6jEN4h5/mn LG1k+nBp9grcEnLhM89no/Ir9mhp6ul0Bz6S2viKXRGbvwSid9LSJ6m+OipAQ8rrkd28 t0XqS6ZAuLhnVQOKtGZ0afWa6LKDT7jFpR2NRtzt1L2UrS4SDgT9kkzXhMVLvy3xfxaV PZzPysxDWqgHvQaA9QF67EcTdhl9w+YtwZbFQUuw4cj6U9iBulgVIGbxkiRN/9f6T0tP 4AKzuCI5aooP6fYrKxZPkOd0JIeAfj50nKTyu9x6VH797+EtjQuvFdNSxPm6dn20v19B SRtw== 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=LlZlVASMP5DloDCidRX1k3vKHnfJZdsxw58odOfpZ3QIQSzDn/SkD9nCa/yHe/uTzj 08cAzarCYTulo/fmF3edEDl3eHBv7QHz2xjtYjaHykzeri+oVNnLWqFTG7cSqc9kaBlo 3ot87EHW6+BWzZeWU2pk9ZvzJD8L2n3LeVV27CMmN66WajmIPNl0Im4G/t4mWmCTyFcg kKu3MjSTOZ2pDXbgUeTfXrojpSauBe3DwHg069d5t4161jZdW8nmoIgQDTvDBdHS3exT QJzcxkbvenvS7Y+C5NRgFXp//lCpLbh3A4gbCaWwVUv2ZXlrEb/9n5xeZ73LxwyXME+Y 2bcQ== X-Gm-Message-State: AODbwcB+UOIfoWhpYn0rA+8k0rC+jj5M91y+viWUiPDx2tFSemZBWuq1 ZaV5Gjc09LXHujodlzM= X-Received: by 10.46.9.15 with SMTP id 15mr5294565ljj.89.1495396880458; Sun, 21 May 2017 13:01:20 -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 17sm1821544ljo.56.2017.05.21.13.01.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 21 May 2017 13:01:20 -0700 (PDT) From: Erik Stromdahl To: kvalo@qca.qualcomm.com, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org Subject: [RFC 2/9] ath10k: htt: RX ring config HL support Date: Sun, 21 May 2017 21:59:04 +0200 Message-Id: <1495396751-4805-3-git-send-email-erik.stromdahl@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495396751-4805-1-git-send-email-erik.stromdahl@gmail.com> References: <1495396751-4805-1-git-send-email-erik.stromdahl@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170521_130141_812386_4621C470 X-CRM114-Status: GOOD ( 12.90 ) 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)