Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp2127797pxb; Fri, 25 Mar 2022 11:34:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJytBzhSjyNR4/siJFZPqI1gve2NAEjNJqIxvtPTjSMZuMB2R83AoC15w27bXf2jCZZXibGP X-Received: by 2002:a63:ed17:0:b0:382:aad5:ff7c with SMTP id d23-20020a63ed17000000b00382aad5ff7cmr686975pgi.243.1648233252304; Fri, 25 Mar 2022 11:34:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648233252; cv=none; d=google.com; s=arc-20160816; b=oKTUHJVvJUqQ2NFee52jke1A64antmt0B+YHzoZvBnKfb9dauIgAZ7KTmA0SIB7sKD t64YR4WobZXWXS4m9esDoje5B3oSNvDJIybVQ/lh2lk9PeZpY+qfULrw099KRmWCWXWu jiRt08KspF1uXWXdpav8MGFUTGPs+Am57jDQ/luFTakAbQ96t+VJKiw7IVNcJ8a2hq02 rhD9CQLn9RRQWJ5ehmA+7+CU+QKTFlRzjI8m47cS9O1bfJmmZWa3MmVvT0JCKnGupnaI m/vDHQ6L62Jtn26G8mCvmehT5/1VrHwyRBOV77nK0M/juufIuWXDKOqLGAoBoqN5BLgw HtIQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HfhFiSazR5AEpCcSLsKBFtyKGjNGuMH/2Hmmg2fcF54=; b=0HE2sn/I1tIKHNGN0kL9/OUxPTGIAxj/NJNlEjyJpAEJk2k3rh4VTFztMsWAnz+9xn n9MqsBi1Bndi8SnrFXATpw2GAFiaeqNv5YUtWkV2bWBDRtI1jGl0BnsyQqrWxl7oAjsf 9lHOYXjmdnPNoWkHMClFMWXkhgObfJnvNs+C7sH+4P3WeeIie8mftJelm5xhuP0okEzj JX9lFSynftclfFFWU/dbh6AmFad10f3HIFo35Fj8xagVeeFco9JLwvSrRO6OInkWEAqk CMNsQleRby4MxRROLZ4fT4M/1NaX5kuwiyyQyH14b+lGCfsLGVuM543WTdUy7AVGH1Ww gYHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=K6eNxOXW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id b5-20020a639305000000b003816043f014si3208078pge.521.2022.03.25.11.34.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Mar 2022 11:34:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@canonical.com header.s=20210705 header.b=K6eNxOXW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 5E70318B256; Fri, 25 Mar 2022 10:54:34 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356620AbiCYD7n (ORCPT + 99 others); Thu, 24 Mar 2022 23:59:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1355628AbiCYD7e (ORCPT ); Thu, 24 Mar 2022 23:59:34 -0400 Received: from smtp-relay-internal-1.canonical.com (smtp-relay-internal-1.canonical.com [185.125.188.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CB23CC55B2 for ; Thu, 24 Mar 2022 20:57:59 -0700 (PDT) Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id A66AD3F6C6 for ; Fri, 25 Mar 2022 03:57:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1648180678; bh=HfhFiSazR5AEpCcSLsKBFtyKGjNGuMH/2Hmmg2fcF54=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=K6eNxOXWTVIg1lw+cpr92g//f2Q779mTD5JEEsvwY9SUVR8JHb05bpnCmE+ILJrnI sPMuMKorrqqliTp0zwNtHOFFYJ67ZZzKYCAXXcwk0Na3o6XhPykht34HCzDG5YWtC8 2GjE29fTSveDao3/kNt3UfzLLwt9WduNCnXy6DQw26jpb5fmJVbbVvF/OI1OPodRlD udCEyqJf72/ZcL0JewGk7Ppy0gqHg/oGbmE6lbrYRQEpJjP42/2PW59l2E0c8KuLFN lA1sf9GFLSbzEYLPUX/YdtDgH8AuT9E9aTQhG3oGMujt2lqhZV5kizecxqElCJejwO C752XSwPyN45w== Received: by mail-pl1-f198.google.com with SMTP id j6-20020a170902c08600b0015442fe6256so3534689pld.23 for ; Thu, 24 Mar 2022 20:57:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HfhFiSazR5AEpCcSLsKBFtyKGjNGuMH/2Hmmg2fcF54=; b=CMFwnqMdS3FNuAmPVacGZ2PTt1i8J9xZ0ts6JCq/dmFnVA1RbTexWQwCYFzZMIOFRs boUamQX/4OIJZTUPcIZuc68qMZNyPnLHHYN+iYpcXbOjnsBw8C0081Yn01CRM0jrY90I HilbkU7gKwVoDCdaMpN2hpZEvtlMxAm2nc8GO9yMzc1jETncjwS4Gqloa7aqGmkpfoVw 5Y58I/jvizQsuC4xm6lEG7LEH8ojAcjfuFKD2rrSnIKZWAwxcD4DEe0WIPcZfjU7Xujc 5+wfk2HWjSaNM5jOWfUDxfTYmOhwYA/wh6s8lYtvgfvClyKMD5r7wgi/1oSjvd08hnpX 80SA== X-Gm-Message-State: AOAM532q+nQcdQQU8zqUgzPezYs+X4p8N8eOdahoV/3n6fTyIFmhT5ST GXK/YXy8qrNWisjqXtVJmYCisLwNFCf9q+bXd4ZVJPgTh67CnQ7P1G0k7xaH4ZgwYWq6R1658Kw nEXS9WwRFWQv4NAxEb/7atFM2QRtXz9IuAHS8c7Snfw== X-Received: by 2002:a63:1e4b:0:b0:381:c48:928b with SMTP id p11-20020a631e4b000000b003810c48928bmr6225535pgm.139.1648180677214; Thu, 24 Mar 2022 20:57:57 -0700 (PDT) X-Received: by 2002:a63:1e4b:0:b0:381:c48:928b with SMTP id p11-20020a631e4b000000b003810c48928bmr6225515pgm.139.1648180676853; Thu, 24 Mar 2022 20:57:56 -0700 (PDT) Received: from localhost.localdomain (2001-b400-e286-bae1-8fdb-11c6-cf63-1f23.emome-ip6.hinet.net. [2001:b400:e286:bae1:8fdb:11c6:cf63:1f23]) by smtp.gmail.com with ESMTPSA id 21-20020a630115000000b00382a0895661sm3825801pgb.11.2022.03.24.20.57.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Mar 2022 20:57:56 -0700 (PDT) From: Chris Chiu To: kvalo@kernel.org, Jes.Sorensen@gmail.com, davem@davemloft.net, kuba@kernel.org Cc: code@reto-schneider.ch, linux-wireless@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Chris Chiu Subject: [PATCH v3 2/2] rtl8xxxu: fill up txrate info for gen1 chips Date: Fri, 25 Mar 2022 11:57:35 +0800 Message-Id: <20220325035735.4745-3-chris.chiu@canonical.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220325035735.4745-1-chris.chiu@canonical.com> References: <20220325035735.4745-1-chris.chiu@canonical.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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-kernel@vger.kernel.org RTL8188CUS/RTL8192CU(gen1) don't support rate adatptive report hence no real txrate info can be retrieved. The vendor driver reports the highest rate in HT capabilities from the IEs to avoid empty txrate. This commit initiates the txrate information with the highest supported rate negotiated with AP. The gen2 chip keeps update the txrate from the rate adaptive reports, and gen1 chips at least have non-NULL txrate after associated. Signed-off-by: Chris Chiu --- Changelog: v3: - Move the rtl8xxxu_legacy_ratetable[] and rtl8xxxu_desc_to_mcsrate() to the proper place instead of adding them v2: - Use the 'static const' for rtl8xxxu_legacy_ratetable[] .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 88 +++++++++++++------ 1 file changed, 59 insertions(+), 29 deletions(-) diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c index d225a1257530..6d9b5cf01b11 100644 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c @@ -4473,6 +4473,35 @@ void rtl8xxxu_gen1_init_aggregation(struct rtl8xxxu_priv *priv) priv->rx_buf_aggregation = 1; } +static const struct ieee80211_rate rtl8xxxu_legacy_ratetable[] = { + {.bitrate = 10, .hw_value = 0x00,}, + {.bitrate = 20, .hw_value = 0x01,}, + {.bitrate = 55, .hw_value = 0x02,}, + {.bitrate = 110, .hw_value = 0x03,}, + {.bitrate = 60, .hw_value = 0x04,}, + {.bitrate = 90, .hw_value = 0x05,}, + {.bitrate = 120, .hw_value = 0x06,}, + {.bitrate = 180, .hw_value = 0x07,}, + {.bitrate = 240, .hw_value = 0x08,}, + {.bitrate = 360, .hw_value = 0x09,}, + {.bitrate = 480, .hw_value = 0x0a,}, + {.bitrate = 540, .hw_value = 0x0b,}, +}; + +static void rtl8xxxu_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss) +{ + if (rate <= DESC_RATE_54M) + return; + + if (rate >= DESC_RATE_MCS0 && rate <= DESC_RATE_MCS15) { + if (rate < DESC_RATE_MCS8) + *nss = 1; + else + *nss = 2; + *mcs = rate - DESC_RATE_MCS0; + } +} + static void rtl8xxxu_set_basic_rates(struct rtl8xxxu_priv *priv, u32 rate_cfg) { struct ieee80211_hw *hw = priv->hw; @@ -4534,9 +4563,12 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct rtl8xxxu_priv *priv = hw->priv; struct device *dev = &priv->udev->dev; struct ieee80211_sta *sta; + struct rtl8xxxu_ra_report *rarpt; u32 val32; u8 val8; + rarpt = &priv->ra_report; + if (changed & BSS_CHANGED_ASSOC) { dev_dbg(dev, "Changed ASSOC: %i!\n", bss_conf->assoc); @@ -4545,6 +4577,10 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, if (bss_conf->assoc) { u32 ramask; int sgi = 0; + u8 highest_rate; + u8 mcs = 0, nss = 0; + u32 bit_rate; + rcu_read_lock(); sta = ieee80211_find_sta(vif, bss_conf->bssid); @@ -4569,6 +4605,29 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, sgi = 1; rcu_read_unlock(); + highest_rate = fls(ramask) - 1; + if (highest_rate < DESC_RATE_MCS0) { + rarpt->txrate.legacy = + rtl8xxxu_legacy_ratetable[highest_rate].bitrate; + } else { + rtl8xxxu_desc_to_mcsrate(highest_rate, + &mcs, &nss); + rarpt->txrate.flags |= RATE_INFO_FLAGS_MCS; + + rarpt->txrate.mcs = mcs; + rarpt->txrate.nss = nss; + + if (sgi) { + rarpt->txrate.flags |= + RATE_INFO_FLAGS_SHORT_GI; + } + + rarpt->txrate.bw |= RATE_INFO_BW_20; + } + bit_rate = cfg80211_calculate_bitrate(&rarpt->txrate); + rarpt->bit_rate = bit_rate; + rarpt->desc_rate = highest_rate; + priv->vif = vif; priv->rssi_level = RTL8XXXU_RATR_STA_INIT; @@ -5419,35 +5478,6 @@ void rtl8723bu_handle_bt_info(struct rtl8xxxu_priv *priv) } } -static struct ieee80211_rate rtl8xxxu_legacy_ratetable[] = { - {.bitrate = 10, .hw_value = 0x00,}, - {.bitrate = 20, .hw_value = 0x01,}, - {.bitrate = 55, .hw_value = 0x02,}, - {.bitrate = 110, .hw_value = 0x03,}, - {.bitrate = 60, .hw_value = 0x04,}, - {.bitrate = 90, .hw_value = 0x05,}, - {.bitrate = 120, .hw_value = 0x06,}, - {.bitrate = 180, .hw_value = 0x07,}, - {.bitrate = 240, .hw_value = 0x08,}, - {.bitrate = 360, .hw_value = 0x09,}, - {.bitrate = 480, .hw_value = 0x0a,}, - {.bitrate = 540, .hw_value = 0x0b,}, -}; - -static void rtl8xxxu_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss) -{ - if (rate <= DESC_RATE_54M) - return; - - if (rate >= DESC_RATE_MCS0 && rate <= DESC_RATE_MCS15) { - if (rate < DESC_RATE_MCS8) - *nss = 1; - else - *nss = 2; - *mcs = rate - DESC_RATE_MCS0; - } -} - static void rtl8xxxu_c2hcmd_callback(struct work_struct *work) { struct rtl8xxxu_priv *priv; -- 2.25.1