From patchwork Mon May 6 14:54:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miles Hu X-Patchwork-Id: 10931187 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-2.web.codeaurora.org (Postfix) with ESMTP id 9D2FA92A for ; Mon, 6 May 2019 14:55:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8939F287C8 for ; Mon, 6 May 2019 14:55:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7DE08287CF; Mon, 6 May 2019 14:55:11 +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=-5.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.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 E4043287C8 for ; Mon, 6 May 2019 14:55:10 +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=Ks+x9Hdm61tk9uGcffj1aj8GjkPEMle5TkjM9Gt+jy4=; b=LDK3ueTSz0s4P3BN8bqLhuiorN 74DaseH3nIlMULUQQg6vSwVYiezY8HrHiLKrI2xD2M7vbilRTG8hogr8mJGQ1utdX7aiV1AdR55ot UUgOnRpOj6e8j9dcA8BQuSPTlD+/N/cEZMZo/HyKJZijPbCJbfzAAdqqwOc98PXP9e/sVzKE48lP/ vwTPpaW92a4Um1OGjeBPoxyUQQw+bJGBTbD5krgoTTRnJs3rr59UDSuk0VkGYFkwNTb0BUYSaHydu CiZtZdLUmQIyfpgLUsvR82BWhkXkk/QXEF+lWI+fePikb0as7g8/rCl+AJokNBRBHIWhMv7gBN+Ym /WI/4pTg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNf1J-0002cT-Ia; Mon, 06 May 2019 14:55:09 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hNf1E-0001tP-Mh for ath11k@lists.infradead.org; Mon, 06 May 2019 14:55:06 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 6203960DAD; Mon, 6 May 2019 14:55:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1557154504; bh=ueXXBqHDa4ChWLj6NY7yebUZJHQ2Y8qpLIFJsLRB9BU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=m3m1SGl4g1lh5tYysM9Tq3nRvTteBlAujj0kDMk22osgrq96Zb/VVdV4rDO/21xt8 NPWWVMtZ/zs5oKvE6bSJupFmeMYPl9Utosz+/f+FlmhOLTIMqrWjMlmQoz/T+Ipbla E1TD6eHifddTZC+e69nyyzmtjo0nHO3vduG3Mmc0= Received: from smtp.codeaurora.org (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: milehu@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 88486606DB; Mon, 6 May 2019 14:55:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1557154503; bh=ueXXBqHDa4ChWLj6NY7yebUZJHQ2Y8qpLIFJsLRB9BU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fSgirYyZShRd1TQTAh4qGVeJNzTqa7GPVWQOc62vBGGmk498TD4h6vmRU1pc9V+wn Q0FkL0hgZI/cRHJyJXPnf4Qg98yY24qIVAonuNK38ulgh7pZogBg7JNUSYcJAr6Ufs 5ph8vof4KeduUlFVhshogr5LbUSbQFpczzcIlkjo= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 88486606DB Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=milehu@codeaurora.org Received: by smtp.codeaurora.org (sSMTP sendmail emulation); Mon, 06 May 2019 07:55:01 -0700 From: Miles Hu To: ath11k@lists.infradead.org Subject: [PATCH v3 2/6] ath11k: monitor filter set function Date: Mon, 6 May 2019 07:54:52 -0700 Message-Id: <1557154496-12059-3-git-send-email-milehu@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1557154496-12059-1-git-send-email-milehu@codeaurora.org> References: <1557154496-12059-1-git-send-email-milehu@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190506_075504_788782_E0341B33 X-CRM114-Status: GOOD ( 13.97 ) X-BeenThere: ath11k@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Miles Hu MIME-Version: 1.0 Sender: "ath11k" Errors-To: ath11k-bounces+patchwork-ath11k=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP create monitor mode filter. implement htt filter set function. create common function to get htt ring id and type. Signed-off-by: Miles Hu --- V2: - Move to ath11k-bringup branch drivers/net/wireless/ath/ath11k/dp_tx.c | 179 +++++++++++++++++++------------- 1 file changed, 107 insertions(+), 72 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c index 86e9d01..ffef794 100644 --- a/drivers/net/wireless/ath/ath11k/dp_tx.c +++ b/drivers/net/wireless/ath/ath11k/dp_tx.c @@ -553,30 +553,15 @@ int ath11k_dp_send_reo_cmd(struct ath11k_base *ab, struct dp_rx_tid *rx_tid, return 0; } -int ath11k_dp_htt_srng_setup(struct ath11k_base *ab, u32 ring_id, - int mac_id, enum hal_ring_type ring_type) +static int +ath11k_dp_get_ring_id_type(struct ath11k_base *ab, + int mac_id, u32 ring_id, + enum hal_ring_type ring_type, + enum htt_srng_ring_type *htt_ring_type, + enum htt_srng_ring_id *htt_ring_id) { - struct htt_srng_setup_cmd *cmd; - struct hal_srng *srng = &ab->hal.srng_list[ring_id]; - struct hal_srng_params params; - struct sk_buff *skb; - int ring_entry_sz; - int len = sizeof(*cmd); - dma_addr_t hp_addr, tp_addr; - int lmac_ring_id_offset; - enum htt_srng_ring_type htt_ring_type; - enum htt_srng_ring_id htt_ring_id; - int ret; - - skb = ath11k_htc_alloc_skb(ab, len); - if (!skb) - return -ENOMEM; - - memset(¶ms, 0, sizeof(params)); - ath11k_hal_srng_get_params(ab, srng, ¶ms); - - hp_addr = ath11k_hal_srng_get_hp_addr(ab, srng); - tp_addr = ath11k_hal_srng_get_tp_addr(ab, srng); + int lmac_ring_id_offset = 0; + int ret = 0; switch (ring_type) { case HAL_RXDMA_BUF: @@ -586,37 +571,66 @@ int ath11k_dp_htt_srng_setup(struct ath11k_base *ab, u32 ring_id, ring_id == (HAL_SRNG_RING_ID_WMAC1_SW2RXDMA1_BUF + lmac_ring_id_offset))) { ret = -EINVAL; - goto err_free; } - - htt_ring_id = HTT_RXDMA_HOST_BUF_RING; - htt_ring_type = HTT_SW_TO_HW_RING; + *htt_ring_id = HTT_RXDMA_HOST_BUF_RING; + *htt_ring_type = HTT_SW_TO_HW_RING; break; case HAL_RXDMA_DST: - htt_ring_id = HTT_RXDMA_NON_MONITOR_DEST_RING; - htt_ring_type = HTT_HW_TO_SW_RING; + *htt_ring_id = HTT_RXDMA_NON_MONITOR_DEST_RING; + *htt_ring_type = HTT_HW_TO_SW_RING; break; case HAL_RXDMA_MONITOR_BUF: - htt_ring_id = HTT_RXDMA_MONITOR_BUF_RING; - htt_ring_type = HTT_SW_TO_HW_RING; + *htt_ring_id = HTT_RXDMA_MONITOR_BUF_RING; + *htt_ring_type = HTT_SW_TO_HW_RING; break; case HAL_RXDMA_MONITOR_STATUS: - htt_ring_id = HTT_RXDMA_MONITOR_STATUS_RING; - htt_ring_type = HTT_SW_TO_HW_RING; + *htt_ring_id = HTT_RXDMA_MONITOR_STATUS_RING; + *htt_ring_type = HTT_SW_TO_HW_RING; break; case HAL_RXDMA_MONITOR_DST: - htt_ring_id = HTT_RXDMA_MONITOR_DEST_RING; - htt_ring_type = HTT_HW_TO_SW_RING; + *htt_ring_id = HTT_RXDMA_MONITOR_DEST_RING; + *htt_ring_type = HTT_HW_TO_SW_RING; break; case HAL_RXDMA_MONITOR_DESC: - htt_ring_id = HTT_RXDMA_MONITOR_DESC_RING; - htt_ring_type = HTT_SW_TO_HW_RING; + *htt_ring_id = HTT_RXDMA_MONITOR_DESC_RING; + *htt_ring_type = HTT_SW_TO_HW_RING; break; default: ath11k_warn(ab, "Unsupported ring type in DP :%d\n", ring_type); ret = -EINVAL; - goto err_free; } + return ret; +} + +int ath11k_dp_htt_srng_setup(struct ath11k_base *ab, u32 ring_id, + int mac_id, enum hal_ring_type ring_type) +{ + struct htt_srng_setup_cmd *cmd; + struct hal_srng *srng = &ab->hal.srng_list[ring_id]; + struct hal_srng_params params; + struct sk_buff *skb; + u32 ring_entry_sz; + int len = sizeof(*cmd); + dma_addr_t hp_addr, tp_addr; + int lmac_ring_id_offset; + enum htt_srng_ring_type htt_ring_type; + enum htt_srng_ring_id htt_ring_id; + int ret = 0; + + skb = ath11k_htc_alloc_skb(ab, len); + if (!skb) + return -ENOMEM; + + memset(¶ms, 0, sizeof(params)); + ath11k_hal_srng_get_params(ab, srng, ¶ms); + + hp_addr = ath11k_hal_srng_get_hp_addr(ab, srng); + tp_addr = ath11k_hal_srng_get_tp_addr(ab, srng); + + if (ath11k_dp_get_ring_id_type(ab, mac_id, ring_id, + ring_type, &htt_ring_type, + &htt_ring_id)) + goto err_free; skb_put(skb, len); cmd = (struct htt_srng_setup_cmd *)skb->data; @@ -784,7 +798,7 @@ int ath11k_dp_htt_rx_filter_setup(struct ath11k_base *ab, u32 ring_id, int len = sizeof(*cmd); enum htt_srng_ring_type htt_ring_type; enum htt_srng_ring_id htt_ring_id; - int ret; + int ret = 0; skb = ath11k_htc_alloc_skb(ab, len); if (!skb) @@ -793,36 +807,10 @@ int ath11k_dp_htt_rx_filter_setup(struct ath11k_base *ab, u32 ring_id, memset(¶ms, 0, sizeof(params)); ath11k_hal_srng_get_params(ab, srng, ¶ms); - switch (ring_type) { - case HAL_RXDMA_BUF: - htt_ring_id = HTT_RXDMA_HOST_BUF_RING; - htt_ring_type = HTT_SW_TO_HW_RING; - break; - case HAL_RXDMA_DST: - htt_ring_id = HTT_RXDMA_NON_MONITOR_DEST_RING; - htt_ring_type = HTT_HW_TO_SW_RING; - break; - case HAL_RXDMA_MONITOR_BUF: - htt_ring_id = HTT_RXDMA_MONITOR_BUF_RING; - htt_ring_type = HTT_SW_TO_HW_RING; - break; - case HAL_RXDMA_MONITOR_STATUS: - htt_ring_id = HTT_RXDMA_MONITOR_STATUS_RING; - htt_ring_type = HTT_SW_TO_HW_RING; - break; - case HAL_RXDMA_MONITOR_DST: - htt_ring_id = HTT_RXDMA_MONITOR_DEST_RING; - htt_ring_type = HTT_HW_TO_SW_RING; - break; - case HAL_RXDMA_MONITOR_DESC: - htt_ring_id = HTT_RXDMA_MONITOR_DESC_RING; - htt_ring_type = HTT_SW_TO_HW_RING; - break; - default: - ath11k_warn(ab, "Unsupported ring type in DP :%d\n", ring_type); - ret = -EINVAL; + if (ath11k_dp_get_ring_id_type(ab, mac_id, ring_id, + ring_type, &htt_ring_type, + &htt_ring_id)) goto err_free; - } skb_put(skb, len); cmd = (struct htt_rx_ring_selection_cfg_cmd *)skb->data; @@ -830,11 +818,13 @@ int ath11k_dp_htt_rx_filter_setup(struct ath11k_base *ab, u32 ring_id, HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG); if (htt_ring_type == HTT_SW_TO_HW_RING || htt_ring_type == HTT_HW_TO_SW_RING) - cmd->info0 |= FIELD_PREP(HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID, - DP_SW2HW_MACID(mac_id)); + cmd->info0 |= + FIELD_PREP(HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID, + DP_SW2HW_MACID(mac_id)); else - cmd->info0 |= FIELD_PREP(HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID, - mac_id); + cmd->info0 |= + FIELD_PREP(HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID, + mac_id); cmd->info0 |= FIELD_PREP(HTT_RX_RING_SELECTION_CFG_CMD_INFO0_RING_ID, htt_ring_id); cmd->info0 |= FIELD_PREP(HTT_RX_RING_SELECTION_CFG_CMD_INFO0_SS, @@ -903,3 +893,48 @@ int ath11k_dp_htt_h2t_ext_stats_req(struct ath11k *ar, u8 type, return 0; } + +int ath11k_dp_htt_monitor_mode_ring_config(struct ath11k *ar, bool reset) +{ + struct ath11k_pdev_dp *dp = &ar->dp; + struct htt_rx_ring_tlv_filter tlv_filter = {0}; + int ret = 0, ring_id = 0; + + ring_id = dp->rxdma_mon_buf_ring.refill_buf_ring.ring_id; + + if (!reset) { + tlv_filter.rx_filter = HTT_RX_MON_FILTER_TLV_FLAGS_MON_BUF_RING; + tlv_filter.pkt_filter_flags0 = + HTT_RX_MON_FP_MGMT_FILTER_FLAGS0 | + HTT_RX_MON_MO_MGMT_FILTER_FLAGS0; + tlv_filter.pkt_filter_flags1 = + HTT_RX_MON_FP_MGMT_FILTER_FLAGS1 | + HTT_RX_MON_MO_MGMT_FILTER_FLAGS1; + tlv_filter.pkt_filter_flags2 = + HTT_RX_MON_FP_CTRL_FILTER_FLASG2 | + HTT_RX_MON_MO_CTRL_FILTER_FLASG2; + tlv_filter.pkt_filter_flags3 = + HTT_RX_MON_FP_CTRL_FILTER_FLASG3 | + HTT_RX_MON_MO_CTRL_FILTER_FLASG3 | + HTT_RX_MON_FP_DATA_FILTER_FLASG3 | + HTT_RX_MON_MO_DATA_FILTER_FLASG3; + } + + ret = ath11k_dp_htt_rx_filter_setup(ar->ab, ring_id, dp->mac_id, + HAL_RXDMA_MONITOR_BUF, + DP_RXDMA_REFILL_RING_SIZE, + &tlv_filter); + if (ret) + return ret; + + ring_id = dp->rx_mon_status_refill_ring.refill_buf_ring.ring_id; + if (!reset) + tlv_filter.rx_filter = + HTT_RX_MON_FILTER_TLV_FLAGS_MON_STATUS_RING; + + ret = ath11k_dp_htt_rx_filter_setup(ar->ab, ring_id, dp->mac_id, + HAL_RXDMA_MONITOR_STATUS, + DP_RXDMA_REFILL_RING_SIZE, + &tlv_filter); + return ret; +}