From patchwork Thu Jun 20 09:17:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11006239 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 B58D114BB for ; Thu, 20 Jun 2019 09:17:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A40AB285F0 for ; Thu, 20 Jun 2019 09:17:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 97E82285FD; Thu, 20 Jun 2019 09:17:36 +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 3DE32285F0 for ; Thu, 20 Jun 2019 09:17:36 +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:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date:Subject:To: From:Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=PEPdOpvMMXs3bxnGVlp70XLp/nStGzRe+iE57zZKVtg=; b=P/ToN7nlXyrZS4 5sg4WQwsDaVSynniA2drYszT9xnyP6OItX6Ctg1FBeAc2rHmiWFsPJIYT32n/OaT43XbhCkg9jLJh OjmXDFasSjWNSgMu8XUpZwCC1tRhSXlDCgmjgv076n8ybsV94W4/pKxzOjjBDYntzXm7ePrihSL14 AwHHyDRqvFkX+vOToU9CS77lNzzpXALTECC7DVxIbqZGhXf3N6983otsCz44ksAuFcI0R12cNTI88 D0XPmZhiGcz2535uVH+IEQtUDDx4CsgZApTFDr4e1E7rWC7id7xQI743nqQFyz6VBXaxdA2F+6hhr V9LptE4k67DL2baTkZHg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hdtCH-0000tj-WB; Thu, 20 Jun 2019 09:17:34 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hdtCE-0000sI-Ks for ath11k@lists.infradead.org; Thu, 20 Jun 2019 09:17:31 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id A2AF260C60; Thu, 20 Jun 2019 09:17:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1561022249; bh=AIHZJbDEVgWSJ7cP16II83IQDv7S0lnpQT8K8UAU87g=; h=From:To:Subject:Date:From; b=Q399Uw9tIFhTdyvyv0mhp7U1coCVT5y/a66QdbDvlLTG+XtZ+OEIZ9aDbU0T1Qwre iqJRDueHXIANNT2LTPZeVjtoWZtOM0Wu+zQWUMcyn1mKzvLi5TegbyoMWbFvyThXx6 FsaJncWiM88aTU8GGkgaXb04fEmXthTcDrm0ULW8= Received: from vasanth-lnx.qca.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vthiagar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 9733060254 for ; Thu, 20 Jun 2019 09:17:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1561022249; bh=AIHZJbDEVgWSJ7cP16II83IQDv7S0lnpQT8K8UAU87g=; h=From:To:Subject:Date:From; b=Q399Uw9tIFhTdyvyv0mhp7U1coCVT5y/a66QdbDvlLTG+XtZ+OEIZ9aDbU0T1Qwre iqJRDueHXIANNT2LTPZeVjtoWZtOM0Wu+zQWUMcyn1mKzvLi5TegbyoMWbFvyThXx6 FsaJncWiM88aTU8GGkgaXb04fEmXthTcDrm0ULW8= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 9733060254 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=vthiagar@codeaurora.org From: Vasanthakumar Thiagarajan To: ath11k@lists.infradead.org Subject: [PATCH V2 1/4] ath11k: Clean up void *per_transfer_context[] in ce Date: Thu, 20 Jun 2019 14:47:06 +0530 Message-Id: <1561022229-854-1-git-send-email-vthiagar@codeaurora.org> X-Mailer: git-send-email 1.9.1 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190620_021730_724530_4B658B22 X-CRM114-Status: GOOD ( 10.23 ) X-BeenThere: ath11k@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "ath11k" Errors-To: ath11k-bounces+patchwork-ath11k=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Since per_transfer_context is used as an array of skb pointer always no need that to be an array of void *. Signed-off-by: Vasanthakumar Thiagarajan --- V2: - Dropped "[PATCH 4/5] ath11k: Clean up link_desc_addr buffer typecast" from the series. This will be addressed later. drivers/net/wireless/ath/ath11k/ce.c | 9 ++++----- drivers/net/wireless/ath/ath11k/ce.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/ce.c b/drivers/net/wireless/ath/ath11k/ce.c index b9a57ec..048adc1 100644 --- a/drivers/net/wireless/ath/ath11k/ce.c +++ b/drivers/net/wireless/ath/ath11k/ce.c @@ -212,7 +212,7 @@ static int ath11k_ce_rx_post_pipe(struct ath11k_ce_pipe *pipe) } static int ath11k_ce_completed_recv_next(struct ath11k_ce_pipe *pipe, - void **context, int *nbytes) + struct sk_buff **context, int *nbytes) { struct ath11k_base *ab = pipe->sc; struct hal_srng *srng; @@ -270,8 +270,7 @@ static void ath11k_ce_recv_process_cb(struct ath11k_ce_pipe *pipe) int ret; __skb_queue_head_init(&list); - while (ath11k_ce_completed_recv_next(pipe, (void **)&skb, - &nbytes) == 0) { + while (ath11k_ce_completed_recv_next(pipe, &skb, &nbytes) == 0) { max_nbytes = skb->len + skb_tailroom(skb); dma_unmap_single(ab->dev, ATH11K_SKB_RXCB(skb)->paddr, max_nbytes, DMA_FROM_DEVICE); @@ -303,7 +302,7 @@ static void ath11k_ce_recv_process_cb(struct ath11k_ce_pipe *pipe) } static int ath11k_ce_completed_send_next(struct ath11k_ce_pipe *pipe, - void **transfer_contextp) + struct sk_buff **transfer_contextp) { struct ath11k_base *ab = pipe->sc; struct hal_srng *srng; @@ -349,7 +348,7 @@ static void ath11k_ce_send_done_cb(struct ath11k_ce_pipe *pipe) struct ath11k_base *ab = pipe->sc; struct sk_buff *skb; - while (ath11k_ce_completed_send_next(pipe, (void **)&skb) == 0) { + while (ath11k_ce_completed_send_next(pipe, &skb) == 0) { if (!skb) continue; diff --git a/drivers/net/wireless/ath/ath11k/ce.h b/drivers/net/wireless/ath/ath11k/ce.h index f9b5a0e..9f25bad 100644 --- a/drivers/net/wireless/ath/ath11k/ce.h +++ b/drivers/net/wireless/ath/ath11k/ce.h @@ -139,7 +139,7 @@ struct ath11k_ce_ring { u32 hal_ring_id; /* keep last */ - void *per_transfer_context[0]; + struct sk_buff *per_transfer_context[0]; }; struct ath11k_ce_pipe { From patchwork Thu Jun 20 09:17:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11006247 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 3CF5914BB for ; Thu, 20 Jun 2019 09:17:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2C29A2844E for ; Thu, 20 Jun 2019 09:17:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2090A285FB; Thu, 20 Jun 2019 09:17:39 +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 049A82844E for ; Thu, 20 Jun 2019 09:17:38 +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:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BLY0tVdH9j67BDOufZ6P1DWij9qmgcf09weOKvWjBts=; b=bkEO4jXXvapyHj A6DKcTX8qF5OUMlnGEGLk5y3x6K3dt99VuhAaBCDQEF1Z58AiSUrPIGedlXTII9nVltauXCNgGhp3 SNtYiJmZ1NZc9ruC/JRbsSwrYi2kT7vGW0o8cBvj0aJbwtD3w4nMa+q4Yz1yoJPjiCskJpRt7ciLP 8MxWoV50/pTdPfMonu2dHLKqLFVNYkkn1kh+JkoinSoHozin8JMM0v1No9RYhJOKhsqyaPv/K/FD+ oTYofgwFvPErU7uhB+e2wMckgMCOWKjZ43C4Cwc9NlFh7jYL2qmM+SGposXr3ZC9khEkKPG3UA55X ZKiZSZ5qti+FqwQTr9+Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hdtCL-0000vt-5n; Thu, 20 Jun 2019 09:17:37 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hdtCF-0000sb-SB for ath11k@lists.infradead.org; Thu, 20 Jun 2019 09:17:34 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 9F60C60CEC; Thu, 20 Jun 2019 09:17:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1561022251; bh=egS+n1+wAeRdm37boMGNyR46OlNcR2KspYsZ5lXzTmc=; h=From:To:Subject:Date:In-Reply-To:References:From; b=lSlp+HiPnxkpB6pIspROygyMfaj7aA0/AkREvLKVvw/vf8k0e8RUeodJcD5HIoruQ UR+V1HRfE0HpbJs9JOqdowTlfpC7eXis6YXnLrxIj4daTU+28UYAla4+ZR86zAKWV1 NbDi0aF2ajRq5b6lK72cSpk7W1m4UgK2wUNghElI= Received: from vasanth-lnx.qca.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vthiagar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id D45B560AD1 for ; Thu, 20 Jun 2019 09:17:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1561022250; bh=egS+n1+wAeRdm37boMGNyR46OlNcR2KspYsZ5lXzTmc=; h=From:To:Subject:Date:In-Reply-To:References:From; b=e0OWqqtlxcszQ7F1AEpdSde0mG22kO8BgUYD/zhn9bWoQ5g7EPKv7DgzsNIY2NLNn 4seoFV/aYTKQTElkRkCpvbQgYm9cLEqn7wdGgHP10yzZq8p0Mo+nDXNPQm8UITdX8J i0QWSn/O18xRaITb5kMJ+nXIRbLD9Gxchc+GfhTw= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org D45B560AD1 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=vthiagar@codeaurora.org From: Vasanthakumar Thiagarajan To: ath11k@lists.infradead.org Subject: [PATCH V2 2/4] ath11k: Add peer.[ch] files for peer related util functions Date: Thu, 20 Jun 2019 14:47:07 +0530 Message-Id: <1561022229-854-2-git-send-email-vthiagar@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1561022229-854-1-git-send-email-vthiagar@codeaurora.org> References: <1561022229-854-1-git-send-email-vthiagar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190620_021731_946753_9DC6FC1B X-CRM114-Status: GOOD ( 19.66 ) X-BeenThere: ath11k@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "ath11k" Errors-To: ath11k-bounces+patchwork-ath11k=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Move peer util functions from mac.c and core.c to peer.c Signed-off-by: Vasanthakumar Thiagarajan --- drivers/net/wireless/ath/ath11k/Makefile | 3 +- drivers/net/wireless/ath/ath11k/core.c | 101 ----------- drivers/net/wireless/ath/ath11k/core.h | 22 --- drivers/net/wireless/ath/ath11k/debug.c | 1 + drivers/net/wireless/ath/ath11k/debugfs_sta.c | 1 + drivers/net/wireless/ath/ath11k/dp.c | 1 + drivers/net/wireless/ath/ath11k/dp_rx.c | 1 + drivers/net/wireless/ath/ath11k/mac.c | 131 +------------- drivers/net/wireless/ath/ath11k/peer.c | 236 ++++++++++++++++++++++++++ drivers/net/wireless/ath/ath11k/peer.h | 35 ++++ drivers/net/wireless/ath/ath11k/wmi.c | 1 + 11 files changed, 279 insertions(+), 254 deletions(-) create mode 100644 drivers/net/wireless/ath/ath11k/peer.c create mode 100644 drivers/net/wireless/ath/ath11k/peer.h diff --git a/drivers/net/wireless/ath/ath11k/Makefile b/drivers/net/wireless/ath/ath11k/Makefile index 4f86b18..6b4a5b5 100644 --- a/drivers/net/wireless/ath/ath11k/Makefile +++ b/drivers/net/wireless/ath/ath11k/Makefile @@ -14,7 +14,8 @@ ath11k-y += core.o \ dp_tx.o \ dp_rx.o \ debug.o \ - ce.o + ce.o \ + peer.o ath11k-$(CONFIG_ATH11K_DEBUGFS) += debug_htt_stats.o ath11k-$(CONFIG_MAC80211_DEBUGFS) += debugfs_sta.o diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c index 26fdcb1..c6dd9ba 100644 --- a/drivers/net/wireless/ath/ath11k/core.c +++ b/drivers/net/wireless/ath/ath11k/core.c @@ -324,107 +324,6 @@ int ath11k_core_fetch_bdf(struct ath11k_base *sc, struct ath11k_board_data *bd) } -struct ath11k_peer *ath11k_peer_find(struct ath11k_base *ab, int vdev_id, - const u8 *addr) -{ - struct ath11k_peer *peer; - - lockdep_assert_held(&ab->data_lock); - - list_for_each_entry(peer, &ab->peers, list) { - if (peer->vdev_id != vdev_id) - continue; - if (memcmp(peer->addr, addr, ETH_ALEN)) - continue; - - return peer; - } - - return NULL; -} - -struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab, - const u8 *addr) -{ - struct ath11k_peer *peer; - - lockdep_assert_held(&ab->data_lock); - - list_for_each_entry(peer, &ab->peers, list) { - if (memcmp(peer->addr, addr, ETH_ALEN)) - continue; - - return peer; - } - - return NULL; -} - -struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab, - int peer_id) -{ - struct ath11k_peer *peer; - - lockdep_assert_held(&ab->data_lock); - - list_for_each_entry(peer, &ab->peers, list) - if (peer_id == peer->peer_id) - return peer; - - return NULL; -} - -void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id) -{ - struct ath11k_peer *peer; - - spin_lock_bh(&ab->data_lock); - - peer = ath11k_peer_find_by_id(ab, peer_id); - if (!peer) { - ath11k_warn(ab, "peer-unmap-event: unknown peer id %d\n", - peer_id); - goto exit; - } - - ath11k_dbg(ab, ATH11K_DBG_DP_HTT, "htt peer unmap vdev %d peer %pM id %d\n", - peer->vdev_id, peer->addr, peer_id); - - list_del(&peer->list); - kfree(peer); - wake_up(&ab->peer_mapping_wq); - -exit: - spin_unlock_bh(&ab->data_lock); -} - -void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id, - u8 *mac_addr, u16 ast_hash) -{ - struct ath11k_peer *peer; - - spin_lock_bh(&ab->data_lock); - peer = ath11k_peer_find(ab, vdev_id, mac_addr); - if (!peer) { - peer = kzalloc(sizeof(*peer), GFP_ATOMIC); - if (!peer) - goto exit; - - peer->vdev_id = vdev_id; - peer->peer_id = peer_id; - peer->ast_hash = ast_hash; - ether_addr_copy(peer->addr, mac_addr); - list_add(&peer->list, &ab->peers); - wake_up(&ab->peer_mapping_wq); - } - - ath11k_dbg(ab, ATH11K_DBG_DP_HTT, "htt peer map vdev %d peer %pM id %d\n", - vdev_id, mac_addr, peer_id); - -exit: - spin_unlock_bh(&ab->data_lock); -} - static void ath11k_core_stop(struct ath11k_base *sc) { if (!test_bit(ATH11K_FLAG_CRASH_FLUSH, &sc->dev_flags)) diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h index 4d42ab40..6b3ee2a 100644 --- a/drivers/net/wireless/ath/ath11k/core.h +++ b/drivers/net/wireless/ath/ath11k/core.h @@ -240,19 +240,6 @@ struct ath11k_rx_peer_stats { u64 reception_type[HAL_RX_RECEPTION_TYPE_MAX]; }; -struct ath11k_peer { - struct list_head list; - struct ieee80211_sta *sta; - int vdev_id; - u8 addr[ETH_ALEN]; - int peer_id; - u16 ast_hash; - - /* protected by ab->data_lock */ - struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX + 1]; - struct dp_rx_tid rx_tid[IEEE80211_NUM_TIDS + 1]; -}; - #define ATH11K_HE_MCS_NUM 12 #define ATH11K_VHT_MCS_NUM 10 #define ATH11K_BW_NUM 4 @@ -790,15 +777,6 @@ struct ath11k_fw_stats_peer_extd { u32 rx_mc_bc_cnt; }; -void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id); -void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id, - u8 *mac_addr, u16 ast_hash); -struct ath11k_peer *ath11k_peer_find(struct ath11k_base *ab, int vdev_id, - const u8 *addr); -struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab, - const u8 *addr); -struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab, - int peer_id); int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab); int ath11k_core_init(struct ath11k_base *ath11k); void ath11k_core_deinit(struct ath11k_base *ath11k); diff --git a/drivers/net/wireless/ath/ath11k/debug.c b/drivers/net/wireless/ath/ath11k/debug.c index c004fe8..7e86c20 100644 --- a/drivers/net/wireless/ath/ath11k/debug.c +++ b/drivers/net/wireless/ath/ath11k/debug.c @@ -10,6 +10,7 @@ #include "hal_rx.h" #include "dp_tx.h" #include "debug_htt_stats.h" +#include "peer.h" void ath11k_info(struct ath11k_base *sc, const char *fmt, ...) { diff --git a/drivers/net/wireless/ath/ath11k/debugfs_sta.c b/drivers/net/wireless/ath/ath11k/debugfs_sta.c index cff6a3f..6bebe6d 100644 --- a/drivers/net/wireless/ath/ath11k/debugfs_sta.c +++ b/drivers/net/wireless/ath/ath11k/debugfs_sta.c @@ -4,6 +4,7 @@ */ #include "core.h" +#include "peer.h" #include "debug.h" void ath11k_sta_update_rx_duration(struct ath11k *ar, diff --git a/drivers/net/wireless/ath/ath11k/dp.c b/drivers/net/wireless/ath/ath11k/dp.c index be10e98..c4770bb 100644 --- a/drivers/net/wireless/ath/ath11k/dp.c +++ b/drivers/net/wireless/ath/ath11k/dp.c @@ -9,6 +9,7 @@ #include "hal_tx.h" #include "debug.h" #include "dp_rx.h" +#include "peer.h" static void ath11k_dp_htt_htc_tx_complete(struct ath11k_base *sc, struct sk_buff *skb) diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c index 54cb7a4..9f47bf4 100644 --- a/drivers/net/wireless/ath/ath11k/dp_rx.c +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c @@ -11,6 +11,7 @@ #include "dp_rx.h" #include "hal_rx.h" #include "dp_tx.h" +#include "peer.h" static u8 *ath11k_dp_rx_h_80211_hdr(u8 *desc) { diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index e064d81..56afbd7 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -13,6 +13,7 @@ #include "dp_tx.h" #include "dp_rx.h" #include "testmode.h" +#include "peer.h" #define CHAN2G(_channel, _freq, _flags) { \ .band = NL80211_BAND_2GHZ, \ @@ -604,113 +605,6 @@ static int ath11k_mac_set_kickout(struct ath11k_vif *arvif) return 0; } -static int ath11k_wait_for_peer_common(struct ath11k_base *ab, int vdev_id, - const u8 *addr, bool expect_mapped) -{ - int ret; - - ret = wait_event_timeout(ab->peer_mapping_wq, ({ - bool mapped; - - spin_lock_bh(&ab->data_lock); - mapped = !!ath11k_peer_find(ab, vdev_id, addr); - spin_unlock_bh(&ab->data_lock); - - (mapped == expect_mapped || - test_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags)); - }), 3 * HZ); - - if (ret <= 0) - return -ETIMEDOUT; - - return 0; -} - -static int -ath11k_wait_for_peer_created(struct ath11k *ar, int vdev_id, const u8 *addr) -{ - return ath11k_wait_for_peer_common(ar->ab, vdev_id, addr, true); -} - -static int -ath11k_wait_for_peer_deleted(struct ath11k *ar, int vdev_id, const u8 *addr) -{ - return ath11k_wait_for_peer_common(ar->ab, vdev_id, addr, false); -} - -static int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, - struct ieee80211_sta *sta, - struct peer_create_params *param) -{ - struct ath11k_peer *peer; - int ret; - - lockdep_assert_held(&ar->conf_mutex); - - if (ar->num_peers > (ar->max_num_peers - 1)) { - ath11k_warn(ar->ab, - "failed to create peer due to insufficient peer entry resource in firmware\n"); - return -ENOBUFS; - } - - ret = ath11k_wmi_send_peer_create_cmd(ar, param); - if (ret) { - ath11k_warn(ar->ab, - "failed to send peer create vdev_id %d ret %d\n", - param->vdev_id, ret); - return ret; - } - - ret = ath11k_wait_for_peer_created(ar, param->vdev_id, - param->peer_addr); - if (ret) - return ret; - - spin_lock_bh(&ar->ab->data_lock); - - peer = ath11k_peer_find(ar->ab, param->vdev_id, param->peer_addr); - if (!peer) { - spin_unlock_bh(&ar->ab->data_lock); - ath11k_warn(ar->ab, "failed to find peer %pM on vdev %i after creation\n", - param->peer_addr, param->vdev_id); - ath11k_wmi_send_peer_delete_cmd(ar, param->peer_addr, - param->vdev_id); - return -ENOENT; - } - - peer->sta = sta; - arvif->ast_hash = peer->ast_hash; - - ar->num_peers++; - - spin_unlock_bh(&ar->ab->data_lock); - - return 0; -} - -static int ath11k_peer_delete(struct ath11k *ar, u32 vdev_id, u8 *addr) -{ - int ret; - - lockdep_assert_held(&ar->conf_mutex); - - ret = ath11k_wmi_send_peer_delete_cmd(ar, addr, vdev_id); - if (ret) { - ath11k_warn(ar->ab, - "failed to delete peer vdev_id %d addr %pM ret %d\n", - vdev_id, addr, ret); - return ret; - } - - ret = ath11k_wait_for_peer_deleted(ar, vdev_id, addr); - if (ret) - return ret; - - ar->num_peers--; - - return 0; -} - void ath11k_mac_peer_cleanup_all(struct ath11k *ar) { struct ath11k_peer *peer, *tmp; @@ -730,29 +624,6 @@ void ath11k_mac_peer_cleanup_all(struct ath11k *ar) ar->num_stations = 0; } -static void ath11k_peer_cleanup(struct ath11k *ar, u32 vdev_id) -{ - struct ath11k_peer *peer, *tmp; - struct ath11k_base *ab = ar->ab; - - lockdep_assert_held(&ar->conf_mutex); - - spin_lock_bh(&ab->data_lock); - list_for_each_entry_safe(peer, tmp, &ab->peers, list) { - if (peer->vdev_id != vdev_id) - continue; - - ath11k_warn(ab, "removing stale peer %pM from vdev_id %d\n", - peer->addr, vdev_id); - - list_del(&peer->list); - kfree(peer); - ar->num_peers--; - } - - spin_unlock_bh(&ab->data_lock); -} - static int ath11k_monitor_vdev_up(struct ath11k *ar, int vdev_id) { int ret = 0; diff --git a/drivers/net/wireless/ath/ath11k/peer.c b/drivers/net/wireless/ath/ath11k/peer.c new file mode 100644 index 0000000..5e7aa96 --- /dev/null +++ b/drivers/net/wireless/ath/ath11k/peer.c @@ -0,0 +1,236 @@ +// SPDX-License-Identifier: ISC +/* + * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. + */ + +#include "core.h" +#include "peer.h" +#include "debug.h" + +struct ath11k_peer *ath11k_peer_find(struct ath11k_base *ab, int vdev_id, + const u8 *addr) +{ + struct ath11k_peer *peer; + + lockdep_assert_held(&ab->data_lock); + + list_for_each_entry(peer, &ab->peers, list) { + if (peer->vdev_id != vdev_id) + continue; + if (memcmp(peer->addr, addr, ETH_ALEN)) + continue; + + return peer; + } + + return NULL; +} + +struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab, + const u8 *addr) +{ + struct ath11k_peer *peer; + + lockdep_assert_held(&ab->data_lock); + + list_for_each_entry(peer, &ab->peers, list) { + if (memcmp(peer->addr, addr, ETH_ALEN)) + continue; + + return peer; + } + + return NULL; +} + +struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab, + int peer_id) +{ + struct ath11k_peer *peer; + + lockdep_assert_held(&ab->data_lock); + + list_for_each_entry(peer, &ab->peers, list) + if (peer_id == peer->peer_id) + return peer; + + return NULL; +} + +void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id) +{ + struct ath11k_peer *peer; + + spin_lock_bh(&ab->data_lock); + + peer = ath11k_peer_find_by_id(ab, peer_id); + if (!peer) { + ath11k_warn(ab, "peer-unmap-event: unknown peer id %d\n", + peer_id); + goto exit; + } + + ath11k_dbg(ab, ATH11K_DBG_DP_HTT, "htt peer unmap vdev %d peer %pM id %d\n", + peer->vdev_id, peer->addr, peer_id); + + list_del(&peer->list); + kfree(peer); + wake_up(&ab->peer_mapping_wq); + +exit: + spin_unlock_bh(&ab->data_lock); +} + +void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id, + u8 *mac_addr, u16 ast_hash) +{ + struct ath11k_peer *peer; + + spin_lock_bh(&ab->data_lock); + peer = ath11k_peer_find(ab, vdev_id, mac_addr); + if (!peer) { + peer = kzalloc(sizeof(*peer), GFP_ATOMIC); + if (!peer) + goto exit; + + peer->vdev_id = vdev_id; + peer->peer_id = peer_id; + peer->ast_hash = ast_hash; + ether_addr_copy(peer->addr, mac_addr); + list_add(&peer->list, &ab->peers); + wake_up(&ab->peer_mapping_wq); + } + + ath11k_dbg(ab, ATH11K_DBG_DP_HTT, "htt peer map vdev %d peer %pM id %d\n", + vdev_id, mac_addr, peer_id); + +exit: + spin_unlock_bh(&ab->data_lock); +} + +static int ath11k_wait_for_peer_common(struct ath11k_base *ab, int vdev_id, + const u8 *addr, bool expect_mapped) +{ + int ret; + + ret = wait_event_timeout(ab->peer_mapping_wq, ({ + bool mapped; + + spin_lock_bh(&ab->data_lock); + mapped = !!ath11k_peer_find(ab, vdev_id, addr); + spin_unlock_bh(&ab->data_lock); + + (mapped == expect_mapped || + test_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags)); + }), 3 * HZ); + + if (ret <= 0) + return -ETIMEDOUT; + + return 0; +} + +void ath11k_peer_cleanup(struct ath11k *ar, u32 vdev_id) +{ + struct ath11k_peer *peer, *tmp; + struct ath11k_base *ab = ar->ab; + + lockdep_assert_held(&ar->conf_mutex); + + spin_lock_bh(&ab->data_lock); + list_for_each_entry_safe(peer, tmp, &ab->peers, list) { + if (peer->vdev_id != vdev_id) + continue; + + ath11k_warn(ab, "removing stale peer %pM from vdev_id %d\n", + peer->addr, vdev_id); + + list_del(&peer->list); + kfree(peer); + ar->num_peers--; + } + + spin_unlock_bh(&ab->data_lock); +} + +static int ath11k_wait_for_peer_deleted(struct ath11k *ar, int vdev_id, const u8 *addr) +{ + return ath11k_wait_for_peer_common(ar->ab, vdev_id, addr, false); +} + +int ath11k_peer_delete(struct ath11k *ar, u32 vdev_id, u8 *addr) +{ + int ret; + + lockdep_assert_held(&ar->conf_mutex); + + ret = ath11k_wmi_send_peer_delete_cmd(ar, addr, vdev_id); + if (ret) { + ath11k_warn(ar->ab, + "failed to delete peer vdev_id %d addr %pM ret %d\n", + vdev_id, addr, ret); + return ret; + } + + ret = ath11k_wait_for_peer_deleted(ar, vdev_id, addr); + if (ret) + return ret; + + ar->num_peers--; + + return 0; +} + +static int ath11k_wait_for_peer_created(struct ath11k *ar, int vdev_id, const u8 *addr) +{ + return ath11k_wait_for_peer_common(ar->ab, vdev_id, addr, true); +} + +int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, + struct ieee80211_sta *sta, struct peer_create_params *param) +{ + struct ath11k_peer *peer; + int ret; + + lockdep_assert_held(&ar->conf_mutex); + + if (ar->num_peers > (ar->max_num_peers - 1)) { + ath11k_warn(ar->ab, + "failed to create peer due to insufficient peer entry resource in firmware\n"); + return -ENOBUFS; + } + + ret = ath11k_wmi_send_peer_create_cmd(ar, param); + if (ret) { + ath11k_warn(ar->ab, + "failed to send peer create vdev_id %d ret %d\n", + param->vdev_id, ret); + return ret; + } + + ret = ath11k_wait_for_peer_created(ar, param->vdev_id, + param->peer_addr); + if (ret) + return ret; + + spin_lock_bh(&ar->ab->data_lock); + + peer = ath11k_peer_find(ar->ab, param->vdev_id, param->peer_addr); + if (!peer) { + spin_unlock_bh(&ar->ab->data_lock); + ath11k_warn(ar->ab, "failed to find peer %pM on vdev %i after creation\n", + param->peer_addr, param->vdev_id); + ath11k_wmi_send_peer_delete_cmd(ar, param->peer_addr, + param->vdev_id); + return -ENOENT; + } + + peer->sta = sta; + arvif->ast_hash = peer->ast_hash; + + ar->num_peers++; + + spin_unlock_bh(&ar->ab->data_lock); + + return 0; +} diff --git a/drivers/net/wireless/ath/ath11k/peer.h b/drivers/net/wireless/ath/ath11k/peer.h new file mode 100644 index 0000000..99e54f1 --- /dev/null +++ b/drivers/net/wireless/ath/ath11k/peer.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: ISC */ +/* + * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. + */ + +#ifndef ATH11K_PEER_H +#define ATH11K_PEER_H + +struct ath11k_peer { + struct list_head list; + struct ieee80211_sta *sta; + int vdev_id; + u8 addr[ETH_ALEN]; + int peer_id; + u16 ast_hash; + + /* protected by ab->data_lock */ + struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX + 1]; + struct dp_rx_tid rx_tid[IEEE80211_NUM_TIDS + 1]; +}; + +void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id); +void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id, + u8 *mac_addr, u16 ast_hash); +struct ath11k_peer *ath11k_peer_find(struct ath11k_base *ab, int vdev_id, + const u8 *addr); +struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab, + const u8 *addr); +struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab, int peer_id); +void ath11k_peer_cleanup(struct ath11k *ar, u32 vdev_id); +int ath11k_peer_delete(struct ath11k *ar, u32 vdev_id, u8 *addr); +int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, + struct ieee80211_sta *sta, struct peer_create_params *param); + +#endif /* _PEER_H_ */ diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c index 1477247..9778a02 100644 --- a/drivers/net/wireless/ath/ath11k/wmi.c +++ b/drivers/net/wireless/ath/ath11k/wmi.c @@ -17,6 +17,7 @@ #include "debug.h" #include "mac.h" #include "hw.h" +#include "peer.h" struct wmi_tlv_policy { size_t min_len; From patchwork Thu Jun 20 09:17:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11006243 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 E94A81580 for ; Thu, 20 Jun 2019 09:17:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D89AD2844E for ; Thu, 20 Jun 2019 09:17:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CCB2A285FD; Thu, 20 Jun 2019 09:17:37 +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 3DD832844E for ; Thu, 20 Jun 2019 09:17:36 +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:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=p1O+jKTKxQ2Pir8a7hm8aiL9AbXUCLlGHQVBtVSkBoM=; b=tK+wPG/vqw+zNL gi4PQ4NClol9HJGRm/01eTibs9rP5KZaemQGlE7ZmkNI7pEokivf2zHqyqpAUHqrOtMnr/fzTg1Qg kgVStEV/KlHnWuB/p7rrgNr9+9jFFe6Di3pgCUxtvjgWojXsFZO6EEEKSNHc761oG7G0n4gQFX4c0 yST7UodBHzh6gmMAjV168QX24FYULGrE37Md6Q/cBmEJ9nX3umLUh9z1QaaX2GUgyJfMu9msYoVje f85DRTfvkENMIzk0dF9zvrPLyyppeRPb3BH4vJazTn1IfIdXuJAkP3E71wdeZSq3qBxPOtCJR2Zzg jjVmvwG9d/6ZvwcePCCA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hdtCI-0000uG-J9; Thu, 20 Jun 2019 09:17:34 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hdtCG-0000su-7K for ath11k@lists.infradead.org; Thu, 20 Jun 2019 09:17:33 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 01E3E60C8B; Thu, 20 Jun 2019 09:17:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1561022252; bh=834GrJ+ldsYfdIvB6lysaLSIPVztACN/6n27MRcJC3Y=; h=From:To:Subject:Date:In-Reply-To:References:From; b=lFdbgeMZweU4DpBVH8aApKLbayzDlBfRVP213EnNC2FoAQskLK3DQpxiuIiht210Q FRtUMQ7xlnXxBTanYZzNmkCInkCiUBMY071tS7UPduxDMd5FDpAsNPPtMNP1y8hDdO OwPjwKZT4GM83VfBp9bX6Nk7D7ftYCHTLGI5Fg2I= Received: from vasanth-lnx.qca.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vthiagar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 2346260A24 for ; Thu, 20 Jun 2019 09:17:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1561022251; bh=834GrJ+ldsYfdIvB6lysaLSIPVztACN/6n27MRcJC3Y=; h=From:To:Subject:Date:In-Reply-To:References:From; b=gA7Ky64kLSUlr4fvJePxKuW/+Ka0kzebwvSbD8hqtDvzZW26hWnXN0GMjfaJOPqXs +2NYW98Y6Sl5zK+2qelbKePEfKkYKum6r/aq483Bn31arGxW2Fw69yqZicTTHRgCSO lrRExOhXEKvWyqXO9xWzCe/6mcotVTGnhLQ/Yoxs= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 2346260A24 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=vthiagar@codeaurora.org From: Vasanthakumar Thiagarajan To: ath11k@lists.infradead.org Subject: [PATCH V2 3/4] ath11k{dp, hal}: Endian macro related clean ups Date: Thu, 20 Jun 2019 14:47:08 +0530 Message-Id: <1561022229-854-3-git-send-email-vthiagar@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1561022229-854-1-git-send-email-vthiagar@codeaurora.org> References: <1561022229-854-1-git-send-email-vthiagar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190620_021732_291770_570A0C6C X-CRM114-Status: GOOD ( 10.15 ) X-BeenThere: ath11k@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "ath11k" Errors-To: ath11k-bounces+patchwork-ath11k=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Replace ifdef __BIG_ENDIAN with IS_ENABLED(CONFIG_CPU_BIG_ENDIAN). Replace swapXX() with swabXX(). Also does a renaming of dp_peer_map_get_mac_addr. Signed-off-by: Vasanthakumar Thiagarajan --- drivers/net/wireless/ath/ath11k/dp.h | 11 +++++------ drivers/net/wireless/ath/ath11k/dp_rx.c | 4 ++-- drivers/net/wireless/ath/ath11k/hal.c | 8 +++----- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp.h b/drivers/net/wireless/ath/ath11k/dp.h index 037fcbd..f7acd65 100644 --- a/drivers/net/wireless/ath/ath11k/dp.h +++ b/drivers/net/wireless/ath/ath11k/dp.h @@ -1483,13 +1483,12 @@ struct htt_mac_addr { u32 mac_addr_h16; }; -static inline void dp_peer_map_get_mac_addr(u32 addr_l32, u16 addr_h16, - u8 *addr) +static inline void ath11k_dp_get_mac_addr(u32 addr_l32, u16 addr_h16, u8 *addr) { -#ifdef __BIG_ENDIAN - addr_l32 = swap32(addr_l32); - addr_h16 = swap16(addr_h16); -#endif + if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) { + addr_l32 = swab32(addr_l32); + addr_h16 = swab16(addr_h16); + } memcpy(addr, &addr_l32, 4); memcpy(addr + 4, &addr_h16, ETH_ALEN - 4); } diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c index 9f47bf4..57a1c27 100644 --- a/drivers/net/wireless/ath/ath11k/dp_rx.c +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c @@ -1385,8 +1385,8 @@ void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab, resp->peer_map_ev.info); peer_mac_h16 = FIELD_GET(HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16, resp->peer_map_ev.info1); - dp_peer_map_get_mac_addr(resp->peer_map_ev.mac_addr_l32, - peer_mac_h16, mac_addr); + ath11k_dp_get_mac_addr(resp->peer_map_ev.mac_addr_l32, + peer_mac_h16, mac_addr); ast_hash = FIELD_GET(HTT_T2H_PEER_MAP_INFO2_AST_HASH_VAL, resp->peer_map_ev.info1); ath11k_peer_map_event(ab, vdev_id, peer_id, mac_addr, ast_hash); diff --git a/drivers/net/wireless/ath/ath11k/hal.c b/drivers/net/wireless/ath/ath11k/hal.c index 3fe8f81..b7b9b9c 100644 --- a/drivers/net/wireless/ath/ath11k/hal.c +++ b/drivers/net/wireless/ath/ath11k/hal.c @@ -1032,11 +1032,9 @@ int ath11k_hal_srng_setup(struct ath11k_base *sc, enum hal_ring_type type, (srng->entry_size * srng->num_entries) << 2); /* TODO: Add comments on these swap configurations */ -#ifdef __BIG_ENDIAN - srng->flags |= HAL_SRNG_FLAGS_MSI_SWAP | - HAL_SRNG_FLAGS_DATA_TLV_SWAP | - HAL_SRNG_FLAGS_RING_PTR_SWAP; -#endif + if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) + srng->flags |= HAL_SRNG_FLAGS_MSI_SWAP | HAL_SRNG_FLAGS_DATA_TLV_SWAP | + HAL_SRNG_FLAGS_RING_PTR_SWAP; reg_base = srng->hwreg_base[HAL_SRNG_REG_GRP_R2]; From patchwork Thu Jun 20 09:17:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11006249 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 533C31580 for ; Thu, 20 Jun 2019 09:17:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 416DB2844E for ; Thu, 20 Jun 2019 09:17:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 35642285FB; Thu, 20 Jun 2019 09:17:40 +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 5F8DF285F0 for ; Thu, 20 Jun 2019 09:17:38 +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:List-Subscribe:List-Help: List-Post:List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=VnYzJ0MnPFcemXgrUoBTza9NhEjqGGF9ifLvh8hZ0TI=; b=mZYOUFqQkOsWCE d0EJtsSCSno1DLaT9/fljp5jJTM5VNfD6YUCsvcFN4N2lp5Wu2o5WJtHB/VVYJBZr7rk8TqU+Uznc AzCA6oLe5DJSms8wNphnd7ORZrpwCNwd/5jkPI5w/tC8+/JgIPsPD9ePjbIJZTjgC8rauN5oF3FGK kdoHDghZSlMPAOBzaAug6AVNlZwh+DvMkDsdEDBgioCf+6LvQ/iXpLiCh3XVlzwoYc3WYN85e9VLP x+YD3cNDHuUaQ+3foyXpf7ufAlnbMwXnesrI4vJ5r/RCAuid/HE776nY4JehZ/etLkIiumcYqveW+ oDlfcK4opp/lV5qem7mQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hdtCL-0000wM-Gl; Thu, 20 Jun 2019 09:17:37 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hdtCH-0000ti-Uy for ath11k@lists.infradead.org; Thu, 20 Jun 2019 09:17:36 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id B3F2160AE0; Thu, 20 Jun 2019 09:17:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1561022253; bh=jVrMnpQl92ceAalY5hP+Dldg2Z33l943UB05CVcPnZQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=CmcIPHOIB28NWXYABg1h/2xb9Y/bPqpAFkHy3nzos67H8T5YNIvjG4vE7MmLzkZt1 pERx0oha6mwgwO/Wdq7maV/3guC1JBqj45WNDywVMmGfwp3gYNLF9CEygzFCMyMcn9 Cto7zHBIwqbqueTZM4qtx5cPU81XbBA7fre8B0Q8= Received: from vasanth-lnx.qca.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vthiagar@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 29E5F60AE0 for ; Thu, 20 Jun 2019 09:17:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1561022252; bh=jVrMnpQl92ceAalY5hP+Dldg2Z33l943UB05CVcPnZQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=PCFfWek65bsF2/f9aqZPZJ5iK5Er26LRIUObgKR3EW1EH8AArKsieUi46TdH8oHNB axnU/NGL4V5/UcW6aHu88B/YuQt9FrWinWgyY6ei7ublEBVcRoanVJFf8/Xkd8BKOI Dwf2M+I7QMpsDTBIqQm+s/tLnBRqOUI2XxbgSDpo= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 29E5F60AE0 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=vthiagar@codeaurora.org From: Vasanthakumar Thiagarajan To: ath11k@lists.infradead.org Subject: [PATCH V2 4/4] ath11k/dp_rx: Clean up void *rx_desc in struct ath11k_skb_rxcb Date: Thu, 20 Jun 2019 14:47:09 +0530 Message-Id: <1561022229-854-4-git-send-email-vthiagar@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1561022229-854-1-git-send-email-vthiagar@codeaurora.org> References: <1561022229-854-1-git-send-email-vthiagar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190620_021734_037542_4D7A0C0B X-CRM114-Status: GOOD ( 14.79 ) X-BeenThere: ath11k@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "ath11k" Errors-To: ath11k-bounces+patchwork-ath11k=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Use the actual struct hal_rx_desc * instead of void *. Signed-off-by: Vasanthakumar Thiagarajan --- drivers/net/wireless/ath/ath11k/core.h | 2 +- drivers/net/wireless/ath/ath11k/dp_rx.c | 205 +++++++++++++------------------- 2 files changed, 84 insertions(+), 123 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h index 6b3ee2a..0cfe30a 100644 --- a/drivers/net/wireless/ath/ath11k/core.h +++ b/drivers/net/wireless/ath/ath11k/core.h @@ -66,7 +66,7 @@ struct ath11k_skb_rxcb { bool is_first_msdu; bool is_last_msdu; bool is_continuation; - void *rx_desc; + struct hal_rx_desc *rx_desc; u8 err_rel_src; u8 err_code; u8 mac_id; diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c index 57a1c27..5666373 100644 --- a/drivers/net/wireless/ath/ath11k/dp_rx.c +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c @@ -13,78 +13,61 @@ #include "dp_tx.h" #include "peer.h" -static u8 *ath11k_dp_rx_h_80211_hdr(u8 *desc) +static u8 *ath11k_dp_rx_h_80211_hdr(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - - return rxd->hdr_status; + return desc->hdr_status; } -static enum hal_encrypt_type ath11k_dp_rx_h_mpdu_start_enctype(u8 *desc) +static enum hal_encrypt_type ath11k_dp_rx_h_mpdu_start_enctype(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - - if (!(__le32_to_cpu(rxd->mpdu_start.info1) & + if (!(__le32_to_cpu(desc->mpdu_start.info1) & RX_MPDU_START_INFO1_ENCRYPT_INFO_VALID)) return HAL_ENCRYPT_TYPE_OPEN; return FIELD_GET(RX_MPDU_START_INFO2_ENC_TYPE, - __le32_to_cpu(rxd->mpdu_start.info2)); + __le32_to_cpu(desc->mpdu_start.info2)); } -static u8 ath11k_dp_rx_h_mpdu_start_decap_type(u8 *desc) +static u8 ath11k_dp_rx_h_mpdu_start_decap_type(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return FIELD_GET(RX_MPDU_START_INFO5_DECAP_TYPE, - __le32_to_cpu(rxd->mpdu_start.info5)); + __le32_to_cpu(desc->mpdu_start.info5)); } -static bool ath11k_dp_rx_h_attn_msdu_done(u8 *desc) +static bool ath11k_dp_rx_h_attn_msdu_done(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return !!FIELD_GET(RX_ATTENTION_INFO2_MSDU_DONE, - __le32_to_cpu(rxd->attention.info2)); + __le32_to_cpu(desc->attention.info2)); } -static bool ath11k_dp_rx_h_attn_first_mpdu(u8 *desc) +static bool ath11k_dp_rx_h_attn_first_mpdu(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return !!FIELD_GET(RX_ATTENTION_INFO1_FIRST_MPDU, - __le32_to_cpu(rxd->attention.info1)); + __le32_to_cpu(desc->attention.info1)); } -static bool ath11k_dp_rx_h_attn_l4_cksum_fail(u8 *desc) +static bool ath11k_dp_rx_h_attn_l4_cksum_fail(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return !!FIELD_GET(RX_ATTENTION_INFO1_TCP_UDP_CKSUM_FAIL, - __le32_to_cpu(rxd->attention.info1)); + __le32_to_cpu(desc->attention.info1)); } -static bool ath11k_dp_rx_h_attn_ip_cksum_fail(u8 *desc) +static bool ath11k_dp_rx_h_attn_ip_cksum_fail(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return !!FIELD_GET(RX_ATTENTION_INFO1_IP_CKSUM_FAIL, - __le32_to_cpu(rxd->attention.info1)); + __le32_to_cpu(desc->attention.info1)); } -static bool ath11k_dp_rx_h_attn_is_decrypted(u8 *desc) +static bool ath11k_dp_rx_h_attn_is_decrypted(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return (FIELD_GET(RX_ATTENTION_INFO2_DCRYPT_STATUS_CODE, - __le32_to_cpu(rxd->attention.info2)) == + __le32_to_cpu(desc->attention.info2)) == RX_DESC_DECRYPT_STATUS_CODE_OK); } -static u32 ath11k_dp_rx_h_attn_mpdu_err(u8 *desc) +static u32 ath11k_dp_rx_h_attn_mpdu_err(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - u32 info = __le32_to_cpu(rxd->attention.info1); + u32 info = __le32_to_cpu(desc->attention.info1); u32 errmap = 0; if (info & RX_ATTENTION_INFO1_FCS_ERR) @@ -111,99 +94,76 @@ static u32 ath11k_dp_rx_h_attn_mpdu_err(u8 *desc) return errmap; } -static u16 ath11k_dp_rx_h_msdu_start_msdu_len(u8 *desc) +static u16 ath11k_dp_rx_h_msdu_start_msdu_len(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return FIELD_GET(RX_MSDU_START_INFO1_MSDU_LENGTH, - __le32_to_cpu(rxd->msdu_start.info1)); + __le32_to_cpu(desc->msdu_start.info1)); } -static u8 ath11k_dp_rx_h_msdu_start_sgi(u8 *desc) +static u8 ath11k_dp_rx_h_msdu_start_sgi(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return FIELD_GET(RX_MSDU_START_INFO3_SGI, - __le32_to_cpu(rxd->msdu_start.info3)); + __le32_to_cpu(desc->msdu_start.info3)); } -static u8 ath11k_dp_rx_h_msdu_start_rate_mcs(u8 *desc) +static u8 ath11k_dp_rx_h_msdu_start_rate_mcs(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return FIELD_GET(RX_MSDU_START_INFO3_RATE_MCS, - __le32_to_cpu(rxd->msdu_start.info3)); + __le32_to_cpu(desc->msdu_start.info3)); } -static u8 ath11k_dp_rx_h_msdu_start_rx_bw(u8 *desc) +static u8 ath11k_dp_rx_h_msdu_start_rx_bw(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return FIELD_GET(RX_MSDU_START_INFO3_RECV_BW, - __le32_to_cpu(rxd->msdu_start.info3)); + __le32_to_cpu(desc->msdu_start.info3)); } -static u8 ath11k_dp_rx_h_msdu_start_rssi(u8 *desc) +static u8 ath11k_dp_rx_h_msdu_start_rssi(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return FIELD_GET(RX_MSDU_START_INFO3_USER_RSSI, - __le32_to_cpu(rxd->msdu_start.info3)); + __le32_to_cpu(desc->msdu_start.info3)); } -static u32 ath11k_dp_rx_h_msdu_start_freq(u8 *desc) +static u32 ath11k_dp_rx_h_msdu_start_freq(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - - return __le32_to_cpu(rxd->msdu_start.phy_meta_data); + return __le32_to_cpu(desc->msdu_start.phy_meta_data); } -static u8 ath11k_dp_rx_h_msdu_start_pkt_type(u8 *desc) +static u8 ath11k_dp_rx_h_msdu_start_pkt_type(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return FIELD_GET(RX_MSDU_START_INFO3_PKT_TYPE, - __le32_to_cpu(rxd->msdu_start.info3)); + __le32_to_cpu(desc->msdu_start.info3)); } -static u8 ath11k_dp_rx_h_msdu_start_nss(u8 *desc) +static u8 ath11k_dp_rx_h_msdu_start_nss(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; u8 mimo_ss_bitmap = FIELD_GET(RX_MSDU_START_INFO3_MIMO_SS_BITMAP, - __le32_to_cpu(rxd->msdu_start.info3)); + __le32_to_cpu(desc->msdu_start.info3)); return hweight8(mimo_ss_bitmap); } -static u8 ath11k_dp_rx_h_msdu_end_l3pad(u8 *desc) +static u8 ath11k_dp_rx_h_msdu_end_l3pad(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return FIELD_GET(RX_MSDU_END_INFO2_L3_HDR_PADDING, - __le32_to_cpu(rxd->msdu_end.info2)); + __le32_to_cpu(desc->msdu_end.info2)); } -static bool ath11k_dp_rx_h_msdu_end_first_msdu(u8 *desc) +static bool ath11k_dp_rx_h_msdu_end_first_msdu(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return !!FIELD_GET(RX_MSDU_END_INFO2_FIRST_MSDU, - __le32_to_cpu(rxd->msdu_end.info2)); + __le32_to_cpu(desc->msdu_end.info2)); } -static bool ath11k_dp_rx_h_msdu_end_last_msdu(u8 *desc) +static bool ath11k_dp_rx_h_msdu_end_last_msdu(struct hal_rx_desc *desc) { - struct hal_rx_desc *rxd = (struct hal_rx_desc *)desc; - return !!FIELD_GET(RX_MSDU_END_INFO2_LAST_MSDU, - __le32_to_cpu(rxd->msdu_end.info2)); + __le32_to_cpu(desc->msdu_end.info2)); } -static void ath11k_dp_rx_desc_end_tlv_copy(u8 *first, u8 *last) +static void ath11k_dp_rx_desc_end_tlv_copy(struct hal_rx_desc *fdesc, + struct hal_rx_desc *ldesc) { - struct hal_rx_desc *fdesc = (struct hal_rx_desc *)first; - struct hal_rx_desc *ldesc = (struct hal_rx_desc *)last; - memcpy((u8 *)&fdesc->msdu_end, (u8 *)&ldesc->msdu_end, sizeof(struct rx_msdu_end)); memcpy((u8 *)&fdesc->attention, (u8 *)&ldesc->attention, @@ -212,9 +172,8 @@ static void ath11k_dp_rx_desc_end_tlv_copy(u8 *first, u8 *last) sizeof(struct rx_mpdu_end)); } -static u32 ath11k_dp_rxdesc_get_mpdulen_err(void *hw_desc_addr) +static u32 ath11k_dp_rxdesc_get_mpdulen_err(struct hal_rx_desc *rx_desc) { - struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)hw_desc_addr; struct rx_attention *rx_attn; rx_attn = &rx_desc->attention; @@ -223,9 +182,8 @@ static u32 ath11k_dp_rxdesc_get_mpdulen_err(void *hw_desc_addr) __le32_to_cpu(rx_attn->info1)); } -static u32 ath11k_dp_rxdesc_get_decap_format(void *hw_desc_addr) +static u32 ath11k_dp_rxdesc_get_decap_format(struct hal_rx_desc *rx_desc) { - struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)hw_desc_addr; struct rx_msdu_start *rx_msdu_start; rx_msdu_start = &rx_desc->msdu_start; @@ -234,9 +192,8 @@ static u32 ath11k_dp_rxdesc_get_decap_format(void *hw_desc_addr) __le32_to_cpu(rx_msdu_start->info2)); } -static u8 *ath11k_dp_rxdesc_get_80211hdr(void *hw_desc_addr) +static u8 *ath11k_dp_rxdesc_get_80211hdr(struct hal_rx_desc *rx_desc) { - struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)hw_desc_addr; u8 *rx_pkt_hdr; rx_pkt_hdr = &rx_desc->msdu_payload[0]; @@ -244,9 +201,8 @@ static u8 *ath11k_dp_rxdesc_get_80211hdr(void *hw_desc_addr) return rx_pkt_hdr; } -static bool ath11k_dp_rxdesc_mpdu_valid(void *hw_desc_addr) +static bool ath11k_dp_rxdesc_mpdu_valid(struct hal_rx_desc *rx_desc) { - struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)hw_desc_addr; u32 tlv_tag; tlv_tag = FIELD_GET(HAL_TLV_HDR_TAG, @@ -255,10 +211,8 @@ static bool ath11k_dp_rxdesc_mpdu_valid(void *hw_desc_addr) return tlv_tag == HAL_RX_MPDU_START ? true : false; } -static u32 ath11k_dp_rxdesc_get_ppduid(void *hw_desc_addr) +static u32 ath11k_dp_rxdesc_get_ppduid(struct hal_rx_desc *rx_desc) { - struct hal_rx_desc *rx_desc = (struct hal_rx_desc *)hw_desc_addr; - return __le16_to_cpu(rx_desc->mpdu_start.phy_ppdu_id); } @@ -1420,6 +1374,7 @@ static int ath11k_dp_rx_msdu_coalesce(struct ath11k *ar, { struct sk_buff *skb; struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(first); + struct hal_rx_desc *ldesc; int space_extra; int rem_len; int buf_len; @@ -1437,8 +1392,9 @@ static int ath11k_dp_rx_msdu_coalesce(struct ath11k *ar, return 0; } - rxcb->is_first_msdu = ath11k_dp_rx_h_msdu_end_first_msdu(last->data); - rxcb->is_last_msdu = ath11k_dp_rx_h_msdu_end_last_msdu(last->data); + ldesc = (struct hal_rx_desc *)last->data; + rxcb->is_first_msdu = ath11k_dp_rx_h_msdu_end_first_msdu(ldesc); + rxcb->is_last_msdu = ath11k_dp_rx_h_msdu_end_last_msdu(ldesc); /* MSDU spans over multiple buffers because the length of the MSDU * exceeds DP_RX_BUFFER_SIZE - HAL_RX_DESC_SIZE. So assume the data @@ -1465,7 +1421,7 @@ static int ath11k_dp_rx_msdu_coalesce(struct ath11k *ar, /* When an MSDU spread over multiple buffers attention, MSDU_END and * MPDU_END tlvs are valid only in the last buffer. Copy those tlvs. */ - ath11k_dp_rx_desc_end_tlv_copy(rxcb->rx_desc, last->data); + ath11k_dp_rx_desc_end_tlv_copy(rxcb->rx_desc, ldesc); rem_len = msdu_len - (DP_RX_BUFFER_SIZE - HAL_RX_DESC_SIZE - l3pad_bytes); @@ -1522,6 +1478,7 @@ static int ath11k_dp_rx_retrieve_amsdu(struct ath11k *ar, struct sk_buff *last_buf; struct ath11k_skb_rxcb *rxcb; struct ieee80211_hdr *hdr; + struct hal_rx_desc *rx_desc, *lrx_desc; u16 msdu_len; u8 l3_pad_bytes; u8 *hdr_status; @@ -1530,7 +1487,8 @@ static int ath11k_dp_rx_retrieve_amsdu(struct ath11k *ar, if (!msdu) return -ENOENT; - hdr_status = ath11k_dp_rx_h_80211_hdr(msdu->data); + rx_desc = (struct hal_rx_desc *)msdu->data; + hdr_status = ath11k_dp_rx_h_80211_hdr(rx_desc); hdr = (struct ieee80211_hdr *)hdr_status; /* Process only data frames */ if (!ieee80211_is_data(hdr->frame_control)) { @@ -1549,16 +1507,19 @@ static int ath11k_dp_rx_retrieve_amsdu(struct ath11k *ar, goto free_out; } - if (!ath11k_dp_rx_h_attn_msdu_done(last_buf->data)) { + rx_desc = (struct hal_rx_desc *)msdu->data; + lrx_desc = (struct hal_rx_desc *)last_buf->data; + + if (!ath11k_dp_rx_h_attn_msdu_done(lrx_desc)) { ath11k_warn(ar->ab, "msdu_done bit in attention is not set\n"); ret = -EIO; goto free_out; } rxcb = ATH11K_SKB_RXCB(msdu); - rxcb->rx_desc = msdu->data; - msdu_len = ath11k_dp_rx_h_msdu_start_msdu_len(msdu->data); - l3_pad_bytes = ath11k_dp_rx_h_msdu_end_l3pad(last_buf->data); + rxcb->rx_desc = rx_desc; + msdu_len = ath11k_dp_rx_h_msdu_start_msdu_len(rx_desc); + l3_pad_bytes = ath11k_dp_rx_h_msdu_end_l3pad(lrx_desc); if (!rxcb->is_continuation) { skb_put(msdu, HAL_RX_DESC_SIZE + l3_pad_bytes + msdu_len); @@ -1855,7 +1816,8 @@ static void ath11k_dp_rx_h_undecap_eth(struct ath11k *ar, } static void ath11k_dp_rx_h_undecap(struct ath11k *ar, struct sk_buff *msdu, - u8 *rx_desc, enum hal_encrypt_type enctype, + struct hal_rx_desc *rx_desc, + enum hal_encrypt_type enctype, struct ieee80211_rx_status *status, bool decrypted) { @@ -1886,7 +1848,7 @@ static void ath11k_dp_rx_h_undecap(struct ath11k *ar, struct sk_buff *msdu, static void ath11k_dp_rx_h_mpdu(struct ath11k *ar, struct sk_buff_head *amsdu_list, - u8 *rx_desc, + struct hal_rx_desc *rx_desc, struct ieee80211_rx_status *rx_status) { struct ieee80211_hdr *hdr; @@ -1944,7 +1906,7 @@ static void ath11k_dp_rx_h_mpdu(struct ath11k *ar, } } -static void ath11k_dp_rx_h_rate(struct ath11k *ar, void *rx_desc, +static void ath11k_dp_rx_h_rate(struct ath11k *ar, struct hal_rx_desc *rx_desc, struct ieee80211_rx_status *rx_status) { struct ieee80211_supported_band *sband; @@ -2006,7 +1968,7 @@ static void ath11k_dp_rx_h_rate(struct ath11k *ar, void *rx_desc, } } -static void ath11k_dp_rx_h_ppdu(struct ath11k *ar, void *rx_desc, +static void ath11k_dp_rx_h_ppdu(struct ath11k *ar, struct hal_rx_desc *rx_desc, struct ieee80211_rx_status *rx_status) { u8 channel_num; @@ -2048,7 +2010,7 @@ static void ath11k_dp_rx_process_amsdu(struct ath11k *ar, { struct sk_buff *first; struct ath11k_skb_rxcb *rxcb; - void *rx_desc; + struct hal_rx_desc *rx_desc; bool first_mpdu; if (skb_queue_empty(amsdu_list)) @@ -2721,7 +2683,7 @@ static int ath11k_dp_rx_link_desc_return(struct ath11k_base *ab, static void ath11k_dp_rx_frag_h_mpdu(struct ath11k *ar, struct sk_buff *msdu, - u8 *rx_desc, + struct hal_rx_desc *rx_desc, struct ieee80211_rx_status *rx_status) { u8 rx_channel; @@ -2782,7 +2744,7 @@ static void ath11k_dp_rx_frag_h_mpdu(struct ath11k *ar, struct sk_buff *msdu; struct ath11k_skb_rxcb *rxcb; struct ieee80211_rx_status *status; - void *rx_desc; + struct hal_rx_desc *rx_desc; u16 msdu_len; spin_lock_bh(&rx_ring->idr_lock); @@ -2821,7 +2783,7 @@ static void ath11k_dp_rx_frag_h_mpdu(struct ath11k *ar, goto exit; } - rx_desc = msdu->data; + rx_desc = (struct hal_rx_desc *)msdu->data; msdu_len = ath11k_dp_rx_h_msdu_start_msdu_len(rx_desc); skb_put(msdu, HAL_RX_DESC_SIZE + msdu_len); skb_pull(msdu, HAL_RX_DESC_SIZE); @@ -2978,7 +2940,7 @@ static int ath11k_dp_rx_h_null_q_desc(struct ath11k *ar, struct sk_buff *msdu, { struct sk_buff_head amsdu_list; u16 msdu_len; - u8 *desc = msdu->data; + struct hal_rx_desc *desc = (struct hal_rx_desc *)msdu->data; u8 l3pad_bytes; struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu); @@ -3062,7 +3024,7 @@ static void ath11k_dp_rx_h_tkip_mic_err(struct ath11k *ar, struct sk_buff *msdu, struct ieee80211_rx_status *status) { u16 msdu_len; - u8 *desc = msdu->data; + struct hal_rx_desc *desc = (struct hal_rx_desc *)msdu->data; u8 l3pad_bytes; struct ath11k_skb_rxcb *rxcb = ATH11K_SKB_RXCB(msdu); @@ -3210,7 +3172,7 @@ int ath11k_dp_rx_process_wbm_err(struct ath11k_base *ab, rxcb->err_rel_src = err_info.err_rel_src; rxcb->err_code = err_info.err_code; - rxcb->rx_desc = msdu->data; + rxcb->rx_desc = (struct hal_rx_desc *)msdu->data; __skb_queue_tail(&msdu_list[mac_id], msdu); } @@ -3674,7 +3636,7 @@ static void ath11k_dp_mon_get_buf_len(struct hal_rx_msdu_desc_info *info, struct sk_buff *msdu = NULL, *last = NULL; struct hal_rx_msdu_list msdu_list; void *p_buf_addr_info, *p_last_buf_addr_info; - void *rx_desc; + struct hal_rx_desc *rx_desc; void *rx_msdu_link_desc; dma_addr_t paddr; u16 num_msdus = 0; @@ -3762,11 +3724,10 @@ static void ath11k_dp_mon_get_buf_len(struct hal_rx_msdu_desc_info *info, goto next_msdu; } - rx_desc = msdu->data; + rx_desc = (struct hal_rx_desc *)msdu->data; rx_pkt_offset = sizeof(struct hal_rx_desc); - l2_hdr_offset = - ath11k_dp_rx_h_msdu_end_l3pad(msdu->data); + l2_hdr_offset = ath11k_dp_rx_h_msdu_end_l3pad(rx_desc); if (is_first_msdu) { if (!ath11k_dp_rxdesc_mpdu_valid(rx_desc)) { @@ -3838,7 +3799,7 @@ static void ath11k_dp_rx_msdus_set_payload(struct sk_buff *msdu) u32 rx_pkt_offset, l2_hdr_offset; rx_pkt_offset = sizeof(struct hal_rx_desc); - l2_hdr_offset = ath11k_dp_rx_h_msdu_end_l3pad(msdu->data); + l2_hdr_offset = ath11k_dp_rx_h_msdu_end_l3pad((struct hal_rx_desc *)msdu->data); skb_pull(msdu, rx_pkt_offset + l2_hdr_offset); } @@ -3850,7 +3811,7 @@ static void ath11k_dp_rx_msdus_set_payload(struct sk_buff *msdu) { struct sk_buff *msdu, *mpdu_buf, *prev_buf; u32 decap_format, wifi_hdr_len; - void *rx_desc; + struct hal_rx_desc *rx_desc; char *hdr_desc; u8 *dest; struct ieee80211_hdr_3addr *wh; @@ -3860,7 +3821,7 @@ static void ath11k_dp_rx_msdus_set_payload(struct sk_buff *msdu) if (!head_msdu) goto err_merge_fail; - rx_desc = head_msdu->data; + rx_desc = (struct hal_rx_desc *)head_msdu->data; if (ath11k_dp_rxdesc_get_mpdulen_err(rx_desc)) return NULL; @@ -3889,7 +3850,7 @@ static void ath11k_dp_rx_msdus_set_payload(struct sk_buff *msdu) __le16 qos_field; u8 qos_pkt = 0; - rx_desc = head_msdu->data; + rx_desc = (struct hal_rx_desc *)head_msdu->data; hdr_desc = ath11k_dp_rxdesc_get_80211hdr(rx_desc); /* Base size */ @@ -3906,7 +3867,7 @@ static void ath11k_dp_rx_msdus_set_payload(struct sk_buff *msdu) msdu = head_msdu; while (msdu) { - rx_desc = msdu->data; + rx_desc = (struct hal_rx_desc *)msdu->data; hdr_desc = ath11k_dp_rxdesc_get_80211hdr(rx_desc); if (qos_pkt) {