Received: by 2002:ac0:da4c:0:0:0:0:0 with SMTP id a12csp378733imi; Fri, 22 Jul 2022 00:42:15 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vUAFSyPNAwQgxHsTKB9yogiuc2hbMv0B7VXR0fyxl9T7xBOs+Sxkp6NjvHRzJHaViW0vqd X-Received: by 2002:a05:6a00:aca:b0:52b:bd66:8dde with SMTP id c10-20020a056a000aca00b0052bbd668ddemr2458554pfl.18.1658475734812; Fri, 22 Jul 2022 00:42:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658475734; cv=none; d=google.com; s=arc-20160816; b=IZiOWXNd8RO5EPpSvdoHQ+sIDX6w3+rY6AtUjRK2vdmNEfJM2x+8WpCUQyynoqX9Jv XHMt2FGqQcG3gHC0U2+GZMVW2YWXyZUJrU75trXAXSUuKqj73qdwNjJZp2uBATdrF6wE WoHN2wH9FH22yTV7wifhIZL3TYjtkk32mJNPVyRnKwzZquZIkUhBgjVKlOFQY8qycNyP jAKnpHXT8SJ2rM7FdBFt6wBzz/dzNFlAcsfEnxe+mmC0Lul7XVZR/FRgzgNpGjTtV8ZW MXRTiACHFxryFzeOettBHkpptZU428fXOeKJ1z8dGCezNm+Q+/2a0OG3ThuyH0xjukof eMIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=tgj9GSegPPdE/gLGptIfBMnNW4gtqn6bdiZIxah8MwQ=; b=x9NbKHCPPt4+OLIsAVWjLGRJA+LHPxEihU2XoSGlCnbHIo3sjlPPEzWPximixlZzkH vijPd+7nfOKw2GK/QfBh2vmhKHB24FEo+dLpfBmxdWT6dhk7ZtLwY4Wxn0MWEu8DQh43 GIoJrU/l+2PI7B+czur6HB0tczG7ZVK2nKf4hbTtg6+REeuHRmhOiUL214blyT5HBkJd iRwckxry5J1C/aB7tXsw35Xauy1qdQW8/T+rCT3S7Zc+NQ3f3gJbIKjGeWhT+tJj5Cwk DkN+vuPCw2uxNAxgnKbdqPAKvKaoqoe9hgQ1S3Fs7CAwh/NqX4YXDLrN1ckf4AAjYnb3 5C7Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=g7ufAdf7; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y13-20020a17090322cd00b0016bcc2046f4si526259plg.207.2022.07.22.00.42.01; Fri, 22 Jul 2022 00:42:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=g7ufAdf7; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234151AbiGVHdI (ORCPT + 65 others); Fri, 22 Jul 2022 03:33:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58348 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229538AbiGVHdG (ORCPT ); Fri, 22 Jul 2022 03:33:06 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BF12832EF6 for ; Fri, 22 Jul 2022 00:33:05 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 74C7BB8279F for ; Fri, 22 Jul 2022 07:33:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99AE4C341C6; Fri, 22 Jul 2022 07:33:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1658475183; bh=/0toe8ULUQgO5N6x+CJDnbE4kXXf4O2D8BXqp7E3lZY=; h=From:To:Cc:Subject:Date:From; b=g7ufAdf7Zoa3phG+1w9pp473pIiyg3u6TAd2aIKNqxBY0WWcWb8Nv3jI9szRDqpiK KOS8OqCW/+wArf4Hgj3t6D8HsSb2SJU7VAbXAkcjuHzxEH54A3KACnxyiSoBxXRlis XAEkY1epJoqf9TDgS+akemgLMya1wRCb2SD0+HmMExe3UIPyPRq46ETshfhNvMUyT9 qGpKFHziONF9s4FFtMjIR2XxRGrxueEs7N6yAohUvAGcu9U3tmoLWaLmsNa/ioF3Kc gzBHIkbArU0iEb2skSgaWMv3L4nOrnZ4giglf2xR5U1vOrZFl1XLmnT6FU+XcOeFiA nLoh1ipCdDgnw== From: Lorenzo Bianconi To: nbd@nbd.name Cc: linux-wireless@vger.kernel.org, lorenzo.bianconi@redhat.com, sean.wang@mediatek.com Subject: [PATCH] mt76: sdio: add rx_check callback for sdio devices Date: Fri, 22 Jul 2022 09:32:36 +0200 Message-Id: <2902205ffea3f07349db8c1466e81a8a5f24dc86.1658474979.git.lorenzo@kernel.org> X-Mailer: git-send-email 2.36.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Introduce rx_check callback support for mt7921s driver. Tested-by: Sean Wang Co-developed-by: Sean Wang Signed-off-by: Sean Wang Signed-off-by: Lorenzo Bianconi --- This patch is based on: "mt76: add rx_check callback for usb devices" https://patchwork.kernel.org/project/linux-wireless/patch/1ce2555483783c2f62bb8fecc575ceca1aad8583.1658335993.git.lorenzo@kernel.org/ --- .../net/wireless/mediatek/mt76/mt7921/sdio.c | 1 + .../net/wireless/mediatek/mt76/sdio_txrx.c | 23 +++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c b/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c index 487acd6e2be8..0c1b6e70e756 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/sdio.c @@ -96,6 +96,7 @@ static int mt7921s_probe(struct sdio_func *func, .tx_complete_skb = mt7921_usb_sdio_tx_complete_skb, .tx_status_data = mt7921_usb_sdio_tx_status_data, .rx_skb = mt7921_queue_rx_skb, + .rx_check = mt7921_rx_check, .sta_ps = mt7921_sta_ps, .sta_add = mt7921_mac_sta_add, .sta_assoc = mt7921_mac_sta_assoc, diff --git a/drivers/net/wireless/mediatek/mt76/sdio_txrx.c b/drivers/net/wireless/mediatek/mt76/sdio_txrx.c index a2601aa9e7b1..bfc4de50a4d2 100644 --- a/drivers/net/wireless/mediatek/mt76/sdio_txrx.c +++ b/drivers/net/wireless/mediatek/mt76/sdio_txrx.c @@ -85,7 +85,7 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid, struct mt76_sdio *sdio = &dev->sdio; int len = 0, err, i; struct page *page; - u8 *buf; + u8 *buf, *end; for (i = 0; i < intr->rx.num[qid]; i++) len += round_up(intr->rx.len[qid][i] + 4, 4); @@ -112,20 +112,29 @@ mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid, return err; } - for (i = 0; i < intr->rx.num[qid]; i++) { + end = buf + len; + i = 0; + + while (i < intr->rx.num[qid] && buf < end) { int index = (q->head + i) % q->ndesc; struct mt76_queue_entry *e = &q->entry[index]; __le32 *rxd = (__le32 *)buf; /* parse rxd to get the actual packet length */ len = le32_get_bits(rxd[0], GENMASK(15, 0)); - e->skb = mt76s_build_rx_skb(buf, len, round_up(len + 4, 4)); - if (!e->skb) - break; + /* Optimized path for TXS */ + if (!dev->drv->rx_check || dev->drv->rx_check(dev, buf, len)) { + e->skb = mt76s_build_rx_skb(buf, len, + round_up(len + 4, 4)); + if (!e->skb) + break; + + if (q->queued + i + 1 == q->ndesc) + break; + i++; + } buf += round_up(len + 4, 4); - if (q->queued + i + 1 == q->ndesc) - break; } put_page(page); -- 2.36.1