From patchwork Tue Jun 18 04:41:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11000879 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 E402776 for ; Tue, 18 Jun 2019 04:41:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C9076289FF for ; Tue, 18 Jun 2019 04:41:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BBF7528A01; Tue, 18 Jun 2019 04:41:43 +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 62E6E289FF for ; Tue, 18 Jun 2019 04:41:43 +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=tTXW040SsZFC5ccoZbM9bOSbS/a0GDW+rmHr6StN+LY=; b=BtNQngP9VJwHvZ 3M0pAbJNoE/NRsxRhimQR1bQYqg5fTI+4pp1bVdgfvwE2pkx8rMszWg51HLxRz23LJQ9h2yYOxP9g ftwECQgv7eTwx58EUOMlbRM4UcFVsSOjlJ6VPAdBihf/NxoLPokzWsGQp57ymEY8b2TdwSr30r718 enM0iGKyOUTjMqG4DslGYNrKG5UQ5W8PIZlNKYz9Gqaz+wqOy5KV48cpdtdeMU51QjhmVvKF+rLIa FVzTsAHJ234cky+ytP9SO7CIAIQzxLI7K+PbTlWcuxavVvOlj3XyxjDuXpxKNA3P3Rx0S+7RoqdoH 1X4uscQDdyPLYyP1Q7PA==; 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 1hd5wE-0007Ap-H8; Tue, 18 Jun 2019 04:41:42 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hd5wB-00079t-Qj for ath11k@lists.infradead.org; Tue, 18 Jun 2019 04:41:41 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 3FFEB6070D; Tue, 18 Jun 2019 04:41:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832899; bh=/wzQF5pXD6oADPzx14EOTP8OMAcOtR55PfZ+LGWyzS0=; h=From:To:Subject:Date:From; b=l9zVVWYDqbUuku7OJOxkLDsj9ITf83fFB9kRwn6krVn+tdcmez3lZcUyYKce8CrTc d4pRZFXzKz50fvF4H1ALrhIxvbTxM00w2yX2X61J5Pk1s9i4wrtkEfNppjUxZF8lBN iAARyELi1QQH97/44xuB6jYcM6/cSUWYFAXSePNA= 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 2F787602FE for ; Tue, 18 Jun 2019 04:41:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832898; bh=/wzQF5pXD6oADPzx14EOTP8OMAcOtR55PfZ+LGWyzS0=; h=From:To:Subject:Date:From; b=TbD1KZsBfKAgO++BpVzGOyVusOAKIAQCtkgIvJBXNIpkxML5zGrD7YLvKK6EL6akL iY9um4y30qb9NJ7xsahmRDMN6ewyJYqnh18nYWmVVepV1KSevpibBv3S4cZUNZ+vnQ CqhMY6FJiHaaa0iohu4EZbIYRwklwdZ3nvA6VZuk= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 2F787602FE 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 1/5] ath11k: Clean up void *per_transfer_context[] in ce Date: Tue, 18 Jun 2019 10:11:25 +0530 Message-Id: <1560832889-14129-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-20190617_214139_901886_6FC7521E X-CRM114-Status: UNSURE ( 9.78 ) X-CRM114-Notice: Please train this message. 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 --- 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 Tue Jun 18 04:41:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11000883 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 A5483924 for ; Tue, 18 Jun 2019 04:41:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 93B9C289FF for ; Tue, 18 Jun 2019 04:41:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 87A3E28A13; Tue, 18 Jun 2019 04:41:47 +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 567D1289FF for ; Tue, 18 Jun 2019 04:41:46 +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=JgUavyWyAIfD9YQU1ubgicz6Hsxen/GUCOm+mr31cdM=; b=r/3plvUWjMe4om atHViRs5iFgaGxQgSD47TpQb9KLnL+7GIbHE/RrjEEAdaOpVNdMvhv18ghz/7BIGFYyEoaMwJxvMi PaRljw52+lISCD3+LbkS2xjoLLGr/KCd54JhTDFP09GoaXDgOyYhRDxgvGWbpk4CB0M/JPJH2DuE5 4X1Mw6bgrL+seVXNvpM9Ulglx/3rhMoOTMo7U/NMhqlNLi81cuR/ylUscYSBPfu4rHSLWK3qg8h33 fqECxCOlJ3EA4jYuXFUPFqAT4ZHHRdMeHXJ8aHVp4DyFSG2ttCUCL5e3qM1jM+TBpg266Z4i6qxeO c3TR3v8L6thJiM9CazVg==; 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 1hd5wH-0007CY-93; Tue, 18 Jun 2019 04:41:45 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hd5wD-0007AK-FJ for ath11k@lists.infradead.org; Tue, 18 Jun 2019 04:41:43 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 3650A60767; Tue, 18 Jun 2019 04:41:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832901; bh=+1jMYHiSGfNvqbmOCKL/hJ+TducyNeRg3LHgcSlw3W4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Q8gC6NUsIga6wekM/Xm1XOgtNBlwUQGJ/Gf1TTqJC0hUvI4xR7sBisXt/h2o6wcVI lFecWDOchO+qPngvsyHRSj9q3Wvbvy4NKnnr4y/rjHlypSlApHfgzv0XH+82kq4a3d MtMDK6MyEI3W0aMxl10vSfY0V7u26Kr7jEl+1qPc= 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 739D160275 for ; Tue, 18 Jun 2019 04:41:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832900; bh=+1jMYHiSGfNvqbmOCKL/hJ+TducyNeRg3LHgcSlw3W4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=EHn4ipTv3H5QU5O4/yinLSL+DQ21QlzF8nVQSmJ0PKgqQqt4BF4KdghL9gbRN4Rlc dqk9Kn9ANi6tVq3eUhp70aeA75XMW/sA4XBeZXOqHkVAIvP/MHNHxhqmolMJShTHOu osoEI2IsGFzZASiM3kt0a1lLR9D7z9LzdqxB1nrU= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 739D160275 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 2/5] ath11k: Add peer.[ch] files for peer related util functions Date: Tue, 18 Jun 2019 10:11:26 +0530 Message-Id: <1560832889-14129-2-git-send-email-vthiagar@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1560832889-14129-1-git-send-email-vthiagar@codeaurora.org> References: <1560832889-14129-1-git-send-email-vthiagar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190617_214141_545256_0A0D3843 X-CRM114-Status: GOOD ( 19.33 ) 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 be4f86a..fc863d6 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 038f905..d15ae78 100644 --- a/drivers/net/wireless/ath/ath11k/core.h +++ b/drivers/net/wireless/ath/ath11k/core.h @@ -239,19 +239,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 @@ -799,15 +786,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 69a2340..4a878eb 100644 --- a/drivers/net/wireless/ath/ath11k/debug.c +++ b/drivers/net/wireless/ath/ath11k/debug.c @@ -9,6 +9,7 @@ #include "wmi.h" #include "hal_rx.h" #include "dp_tx.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 0aec840..815a343 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 1d9892e..9e5bd81 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 a7e8e00..2191b57 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 f5e5d3d..12f3024 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 Tue Jun 18 04:41:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11000881 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 44C61924 for ; Tue, 18 Jun 2019 04:41:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 34B9D289FF for ; Tue, 18 Jun 2019 04:41:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 292D328A01; Tue, 18 Jun 2019 04:41:46 +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 C2A94289FF for ; Tue, 18 Jun 2019 04:41:45 +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=O0m5TR6Tff4k9CnpnMbJvj28UZZEVFht7BcnTan44XY=; b=a/JY5MUQR/1R/d LEuacSdyW35atBEtlPrTN29qcsB3Bql+IiKkHBZZCfTtckHKTVsGqmhjZn7aZ5nhsXEfp1GpGZyvi ukcocqrUxyRvhexR3thgHdM1ea82ON3WxjQklIoYMlpxcLZBrA1Yaayt6PuSD9PuGcbw+EEqE1/Cx yUTTbFWtoRWex2eSotX2umJ0pkiqNhZTjDxHY+lGbj/SRmCYvPaPKHjTfQPmwyhD9bfYyU7VMilN9 wj7KtKHL18/3QEVsXd6Hy1aNG2T43oZxkCLZ+1fl7K/icydjuJ4DIC9DnM+W9AI3r0yZeNYrv08y8 la3INpzuLTezvqiSI/rw==; 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 1hd5wG-0007C2-R2; Tue, 18 Jun 2019 04:41:44 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hd5wD-0007Ad-Qa for ath11k@lists.infradead.org; Tue, 18 Jun 2019 04:41:43 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 8FFA46074C; Tue, 18 Jun 2019 04:41:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832901; bh=kiv2mKPLQ7Pbdab5MQfPtEAVtWfsSwou4ejQnCyWIF4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=mOz9UWgcn+90shvLwaBPZdnacU7FhW6DPp2ZiTPnYzoDOf53zBKj3uEvtd0AWN6p5 VZaUJ3sjyJKIIS85GIDSSNlQ49onxPHWbD8W0jk/lq1qoiiKa7SLmvIXmW1N57qIf/ WStxDXblmwWdRTzNzby6D1oY28JkCjl8Fl9+S3yY= 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 BB34D602FE for ; Tue, 18 Jun 2019 04:41:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832901; bh=kiv2mKPLQ7Pbdab5MQfPtEAVtWfsSwou4ejQnCyWIF4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=mOz9UWgcn+90shvLwaBPZdnacU7FhW6DPp2ZiTPnYzoDOf53zBKj3uEvtd0AWN6p5 VZaUJ3sjyJKIIS85GIDSSNlQ49onxPHWbD8W0jk/lq1qoiiKa7SLmvIXmW1N57qIf/ WStxDXblmwWdRTzNzby6D1oY28JkCjl8Fl9+S3yY= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org BB34D602FE 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 3/5] ath11k{dp, hal}: Endian macro related clean ups Date: Tue, 18 Jun 2019 10:11:27 +0530 Message-Id: <1560832889-14129-3-git-send-email-vthiagar@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1560832889-14129-1-git-send-email-vthiagar@codeaurora.org> References: <1560832889-14129-1-git-send-email-vthiagar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190617_214141_890700_F250E836 X-CRM114-Status: UNSURE ( 9.61 ) X-CRM114-Notice: Please train this message. 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 9e5bd81..5c47cfc 100644 --- a/drivers/net/wireless/ath/ath11k/dp_rx.c +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c @@ -1386,8 +1386,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 Tue Jun 18 04:41:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11000885 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 2239476 for ; Tue, 18 Jun 2019 04:41:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 12955289FF for ; Tue, 18 Jun 2019 04:41:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 06BE728A00; Tue, 18 Jun 2019 04:41: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=-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 22A7828A01 for ; Tue, 18 Jun 2019 04:41:47 +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=aLLMTnf3E1oNoOmooIy4/qIq0GHzUdozRn5WCfl6fMA=; b=Rcvg7xCgmqTKRl s7fnt+8+w02EQQoDtCZ2eXowrvOd1+oLrdEWxH82YOW/SlVpEPbrf28fb7w0cmnDXb07lisjRAkIQ z0AkZiKbQeCEqvzPfUlFOEQF2A7WdnLFkZMGS6Nj33sOeNJAto+YkpcRV8YqlliCrSoKGc2bseqLW Zx1n6LDqFNnZVRO7kAwvAfDkAECE5PE+naBpicfwkrmOcBqcBFxJjjsm5ZHgOf9FS7gm7MgFmanel yHGIsEvYHZsOf0Zjgl6hWz8mORZFjQbAyGPyvQ8z2+wm4vRp9xctrZuV2i5gd9D2DKKJMgWCwKGsf IGE4sTyxF5U7+TPnvRVg==; 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 1hd5wH-0007Cy-Te; Tue, 18 Jun 2019 04:41:46 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hd5wE-0007B7-TJ for ath11k@lists.infradead.org; Tue, 18 Jun 2019 04:41:44 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id A129F60770; Tue, 18 Jun 2019 04:41:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832902; bh=U+CDqB60t7sABG8co2NVlwcTVtcvaoqE4ghjGBOISRk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ZV3Gp74fkEPPsjnZs29EPBvBbcDaJ5hkVsBlMit6o8gBC4Yn6u4izpBExz/dJlGOE U3+M2rzwSbSYlNShQl4PxbEG9IzEZfa5ep11hozZ5W+s0ilaOTw7S9KCFmPWLPOm9+ 6g1Cf9ZrwfbrU/ZNJgiH+94lSjSX9P5JeCji+Uro= 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 C558A602FE for ; Tue, 18 Jun 2019 04:41:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832902; bh=U+CDqB60t7sABG8co2NVlwcTVtcvaoqE4ghjGBOISRk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ZV3Gp74fkEPPsjnZs29EPBvBbcDaJ5hkVsBlMit6o8gBC4Yn6u4izpBExz/dJlGOE U3+M2rzwSbSYlNShQl4PxbEG9IzEZfa5ep11hozZ5W+s0ilaOTw7S9KCFmPWLPOm9+ 6g1Cf9ZrwfbrU/ZNJgiH+94lSjSX9P5JeCji+Uro= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org C558A602FE 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 4/5] ath11k: Clean up link_desc_addr buffer typecast Date: Tue, 18 Jun 2019 10:11:28 +0530 Message-Id: <1560832889-14129-4-git-send-email-vthiagar@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1560832889-14129-1-git-send-email-vthiagar@codeaurora.org> References: <1560832889-14129-1-git-send-email-vthiagar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190617_214142_974847_0018B33F X-CRM114-Status: UNSURE ( 9.59 ) X-CRM114-Notice: Please train this message. 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 It is not necessary to typecast scatter_buf while calling ath11k_hal_set_link_desc_addr(). Few more trivial clean ups related to scatter_buf typecast. Signed-off-by: Vasanthakumar Thiagarajan --- drivers/net/wireless/ath/ath11k/dp.c | 11 +++-------- drivers/net/wireless/ath/ath11k/hal.c | 2 +- drivers/net/wireless/ath/ath11k/hal.h | 2 +- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp.c b/drivers/net/wireless/ath/ath11k/dp.c index 815a343..e565638 100644 --- a/drivers/net/wireless/ath/ath11k/dp.c +++ b/drivers/net/wireless/ath/ath11k/dp.c @@ -372,9 +372,7 @@ static int ath11k_dp_scatter_idle_link_desc_setup(struct ath11k_base *ab, HAL_LINK_DESC_SIZE; paddr = link_desc_banks[i].paddr; while (n_entries) { - ath11k_hal_set_link_desc_addr( - (struct buffer_addr *)scatter_buf, i, - paddr); + ath11k_hal_set_link_desc_addr(scatter_buf, i, paddr); n_entries--; paddr += HAL_LINK_DESC_SIZE; if (rem_entries) { @@ -391,8 +389,7 @@ static int ath11k_dp_scatter_idle_link_desc_setup(struct ath11k_base *ab, } ath11k_hal_setup_link_idle_list(ab, slist, num_scatter_buf, - n_link_desc, - (u8 *)scatter_buf - + n_link_desc, (u8 *)scatter_buf - (u8 *)slist[scatter_idx].vaddr); return 0; @@ -576,9 +573,7 @@ int ath11k_dp_link_desc_setup(struct ath11k_base *ab, paddr = link_desc_banks[i].paddr; while (n_entries && (desc = ath11k_hal_srng_src_get_next_entry(ab, srng))) { - ath11k_hal_set_link_desc_addr( - (struct buffer_addr *)desc, i, - paddr); + ath11k_hal_set_link_desc_addr(desc, i, paddr); n_entries--; paddr += HAL_LINK_DESC_SIZE; } diff --git a/drivers/net/wireless/ath/ath11k/hal.c b/drivers/net/wireless/ath/ath11k/hal.c index b7b9b9c..6c8e37f 100644 --- a/drivers/net/wireless/ath/ath11k/hal.c +++ b/drivers/net/wireless/ath/ath11k/hal.c @@ -689,7 +689,7 @@ u32 ath11k_hal_ce_dst_status_get_length(void *buf) return len; } -void ath11k_hal_set_link_desc_addr(void *buf, u32 cookie, dma_addr_t paddr) +void ath11k_hal_set_link_desc_addr(u32 *buf, u32 cookie, dma_addr_t paddr) { struct buffer_addr *desc = (struct buffer_addr *)buf; diff --git a/drivers/net/wireless/ath/ath11k/hal.h b/drivers/net/wireless/ath/ath11k/hal.h index 6649dd2..f1b4157 100644 --- a/drivers/net/wireless/ath/ath11k/hal.h +++ b/drivers/net/wireless/ath/ath11k/hal.h @@ -875,7 +875,7 @@ dma_addr_t ath11k_hal_srng_get_tp_addr(struct ath11k_base *ab, struct hal_srng *srng); dma_addr_t ath11k_hal_srng_get_hp_addr(struct ath11k_base *ab, struct hal_srng *srng); -void ath11k_hal_set_link_desc_addr(void *buf, u32 cookie, dma_addr_t paddr); +void ath11k_hal_set_link_desc_addr(u32 *buf, u32 cookie, dma_addr_t paddr); u32 ath11k_hal_ce_get_desc_size(enum hal_ce_desc type); void ath11k_hal_ce_src_set_desc(void *buf, dma_addr_t paddr, u32 len, u32 id, u8 byte_swap_data); From patchwork Tue Jun 18 04:41:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasanthakumar Thiagarajan X-Patchwork-Id: 11000887 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 96B0376 for ; Tue, 18 Jun 2019 04:41:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8458C289FF for ; Tue, 18 Jun 2019 04:41:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6D49028A01; Tue, 18 Jun 2019 04:41:50 +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 5BCE2289FF for ; Tue, 18 Jun 2019 04:41:49 +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=Vxzz3HIPKrilWdFG14a9Naji8WUi/uTmaRfyCzcm2HA=; b=DIIbCBZhXCZaeQ wm+L7LwB0yOwa6CCA4+CahQhWngS6E17ECRL6USX7z8ArTZ5hWVpF9ycgRG+g0yqsfkj5SjKlE7mc 0OBcFAJVf7526DI/AaTGTpI2QvkJODhU2Lz9QGBBg0NIWPc7ZP8+6pKo3YC0cQdub5Mq2CNUU2CRv ExhS7baCKimYnljdBu2nD///I89a95RL7JLNUW3bH5VeRwSHNLYk5SD+7O9z5n1x7Jntybbyhv9kl jx1h7z+GD/5kNVK83U+nBEi41o73Uan3AlMGvCT+NTWP/mBuKvGMr3b02xbF8qMuxfjHDdFey0fKV TCRrfmrjOdr1bsIIQtoA==; 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 1hd5wK-0007Er-JX; Tue, 18 Jun 2019 04:41:48 +0000 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hd5wG-0007Bx-MY for ath11k@lists.infradead.org; Tue, 18 Jun 2019 04:41:47 +0000 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 6A5A8607C3; Tue, 18 Jun 2019 04:41:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832904; bh=py2hdX3IDM3LQycq57SHvC1S8cX2w+a33Sbi7PVs6iw=; h=From:To:Subject:Date:In-Reply-To:References:From; b=KNCh3EKvXTccfibkeoUF+gRpBKD22BmF+NyS0kTC0CrwjPcJ/wr/faxRHnoQL/+xb OHSAAVZhDRuTtG0iUxzB5m0kLPNrteO95ysKxty1tMazxyOL8YSi1OpjlY4qBg8O+h mCqlj1Y5r0xbv9PGRTjDWpoL7h/7zFAfPewQzAIo= 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 D0995606DC for ; Tue, 18 Jun 2019 04:41:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560832903; bh=py2hdX3IDM3LQycq57SHvC1S8cX2w+a33Sbi7PVs6iw=; h=From:To:Subject:Date:In-Reply-To:References:From; b=H11FlK+d5slhhj6XX9EqT91Kzz2Xzs3tckSk1PvKd+lxtK059uPp5RRHORgpT+5ma waLtoqQnOjpO5vvfsnKBKliBwDzSpsUuGtVkzON2xG5mSUMRS5lfqxIFzFqvIZh4j4 qC3w7iQ82CAdQmveIuhZ58zOXXq4Jyn7niYzy23k= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org D0995606DC 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 5/5] ath11k/dp_rx: Clean up void *rx_desc in struct ath11k_skb_rxcb Date: Tue, 18 Jun 2019 10:11:29 +0530 Message-Id: <1560832889-14129-5-git-send-email-vthiagar@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1560832889-14129-1-git-send-email-vthiagar@codeaurora.org> References: <1560832889-14129-1-git-send-email-vthiagar@codeaurora.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190617_214144_813852_0D34507F X-CRM114-Status: GOOD ( 14.45 ) 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 d15ae78..7591ffb 100644 --- a/drivers/net/wireless/ath/ath11k/core.h +++ b/drivers/net/wireless/ath/ath11k/core.h @@ -65,7 +65,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 5c47cfc..1c4f81c 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); } @@ -1421,6 +1375,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; @@ -1438,8 +1393,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 @@ -1466,7 +1422,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); @@ -1523,6 +1479,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; @@ -1531,7 +1488,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)) { @@ -1550,16 +1508,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); @@ -1856,7 +1817,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) { @@ -1887,7 +1849,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; @@ -1945,7 +1907,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; @@ -2007,7 +1969,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; @@ -2049,7 +2011,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)) @@ -2726,7 +2688,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; @@ -2787,7 +2749,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); @@ -2826,7 +2788,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); @@ -2983,7 +2945,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); @@ -3067,7 +3029,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); @@ -3215,7 +3177,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); } @@ -3679,7 +3641,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; @@ -3768,11 +3730,10 @@ static void ath11k_dp_mon_get_buf_len(struct hal_rx_msdu_desc_info *info, goto next_msdu; } data = msdu->data; - 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)) { @@ -3844,7 +3805,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); } @@ -3856,7 +3817,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; @@ -3866,7 +3827,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; @@ -3895,7 +3856,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 */ @@ -3912,7 +3873,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) {