Search Linux Wireless

RE: [PATCH v2 1/2] wifi: rtl8xxxu: Clean up some messy ifs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx>
> Sent: Monday, April 10, 2023 11:36 PM
> To: linux-wireless@xxxxxxxxxxxxxxx
> Cc: Jes Sorensen <Jes.Sorensen@xxxxxxxxx>; Ping-Ke Shih <pkshih@xxxxxxxxxxx>
> Subject: [PATCH v2 1/2] wifi: rtl8xxxu: Clean up some messy ifs
> 
> Add some new members to rtl8xxxu_fileops and use them instead of
> checking priv->rtl_chip.
> 
> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx>

Reviewed-by: Ping-Ke Shih <pkshih@xxxxxxxxxxx>

> ---
> v2:
>  - Don't set init_reg_pkt_life_time for the RTL8192EU. Just because
>    this patch should not introduce any changes in behaviour.
> ---
>  .../net/wireless/realtek/rtl8xxxu/rtl8xxxu.h  |  5 ++++
>  .../realtek/rtl8xxxu/rtl8xxxu_8188e.c         |  1 +
>  .../realtek/rtl8xxxu/rtl8xxxu_8188f.c         |  5 ++++
>  .../realtek/rtl8xxxu/rtl8xxxu_8710b.c         |  9 +++++++
>  .../realtek/rtl8xxxu/rtl8xxxu_8723b.c         |  3 +++
>  .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 26 +++++--------------
>  6 files changed, 30 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
> index 9d48c69ffece..39fee07917e7 100644
> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
> @@ -1923,6 +1923,11 @@ struct rtl8xxxu_fileops {
>         u8 has_tx_report:1;
>         u8 gen2_thermal_meter:1;
>         u8 needs_full_init:1;
> +       u8 init_reg_rxfltmap:1;
> +       u8 init_reg_pkt_life_time:1;
> +       u8 init_reg_hmtfr:1;
> +       u8 ampdu_max_time;
> +       u8 ustime_tsf_edca;
>         u32 adda_1t_init;
>         u32 adda_1t_path_on;
>         u32 adda_2t_path_on_a;
> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
> index 6a82ec47568e..af8436070ba7 100644
> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
> @@ -1883,6 +1883,7 @@ struct rtl8xxxu_fileops rtl8188eu_fops = {
>         .rx_desc_size = sizeof(struct rtl8xxxu_rxdesc16),
>         .tx_desc_size = sizeof(struct rtl8xxxu_txdesc32),
>         .has_tx_report = 1,
> +       .init_reg_pkt_life_time = 1,
>         .gen2_thermal_meter = 1,
>         .adda_1t_init = 0x0b1b25a0,
>         .adda_1t_path_on = 0x0bdb25a0,
> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188f.c
> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188f.c
> index 82dee1fed477..dfb250adb168 100644
> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188f.c
> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188f.c
> @@ -1746,6 +1746,11 @@ struct rtl8xxxu_fileops rtl8188fu_fops = {
>         .has_tx_report = 1,
>         .gen2_thermal_meter = 1,
>         .needs_full_init = 1,
> +       .init_reg_rxfltmap = 1,
> +       .init_reg_pkt_life_time = 1,
> +       .init_reg_hmtfr = 1,
> +       .ampdu_max_time = 0x70,
> +       .ustime_tsf_edca = 0x28,
>         .adda_1t_init = 0x03c00014,
>         .adda_1t_path_on = 0x03c00014,
>         .trxff_boundary = 0x3f7f,
> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8710b.c
> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8710b.c
> index 920466e39604..22d4704dd31e 100644
> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8710b.c
> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8710b.c
> @@ -1865,6 +1865,15 @@ struct rtl8xxxu_fileops rtl8710bu_fops = {
>         .has_tx_report = 1,
>         .gen2_thermal_meter = 1,
>         .needs_full_init = 1,
> +       .init_reg_rxfltmap = 1,
> +       .init_reg_pkt_life_time = 1,
> +       .init_reg_hmtfr = 1,
> +       .ampdu_max_time = 0x5e,
> +       /*
> +        * The RTL8710BU vendor driver uses 0x50 here and it works fine,
> +        * but in rtl8xxxu 0x50 causes slow upload and random packet loss. Why?
> +        */
> +       .ustime_tsf_edca = 0x28,
>         .adda_1t_init = 0x03c00016,
>         .adda_1t_path_on = 0x03c00016,
>         .trxff_boundary = 0x3f7f,
> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
> index d99538eb8398..c31c2b52ac77 100644
> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8723b.c
> @@ -1741,6 +1741,9 @@ struct rtl8xxxu_fileops rtl8723bu_fops = {
>         .has_tx_report = 1,
>         .gen2_thermal_meter = 1,
>         .needs_full_init = 1,
> +       .init_reg_hmtfr = 1,
> +       .ampdu_max_time = 0x5e,
> +       .ustime_tsf_edca = 0x50,
>         .adda_1t_init = 0x01c00014,
>         .adda_1t_path_on = 0x01c00014,
>         .adda_2t_path_on_a = 0x01c00014,
> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
> index c152b228606f..62dd53a57659 100644
> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
> @@ -1916,7 +1916,7 @@ static int rtl8xxxu_start_firmware(struct rtl8xxxu_priv *priv)
>         /*
>          * Init H2C command
>          */
> -       if (priv->rtl_chip == RTL8723B || priv->rtl_chip == RTL8188F || priv->rtl_chip == RTL8710B)
> +       if (priv->fops->init_reg_hmtfr)
>                 rtl8xxxu_write8(priv, REG_HMTFR, 0x0f);
>  exit:
>         return ret;
> @@ -3864,11 +3864,8 @@ void rtl8xxxu_init_burst(struct rtl8xxxu_priv *priv)
>         rtl8xxxu_write8(priv, REG_HT_SINGLE_AMPDU_8723B, val8);
> 
>         rtl8xxxu_write16(priv, REG_MAX_AGGR_NUM, 0x0c14);
> -       if (priv->rtl_chip == RTL8723B || priv->rtl_chip == RTL8710B)
> -               val8 = 0x5e;
> -       else if (priv->rtl_chip == RTL8188F)
> -               val8 = 0x70; /* 0x5e would make it very slow */
> -       rtl8xxxu_write8(priv, REG_AMPDU_MAX_TIME_8723B, val8);
> +       rtl8xxxu_write8(priv, REG_AMPDU_MAX_TIME_8723B,
> +                       priv->fops->ampdu_max_time);
>         rtl8xxxu_write32(priv, REG_AGGLEN_LMT, 0xffffffff);
>         rtl8xxxu_write8(priv, REG_RX_PKT_LIMIT, 0x18);
>         rtl8xxxu_write8(priv, REG_PIFS, 0x00);
> @@ -3876,16 +3873,8 @@ void rtl8xxxu_init_burst(struct rtl8xxxu_priv *priv)
>                 rtl8xxxu_write8(priv, REG_FWHW_TXQ_CTRL, FWHW_TXQ_CTRL_AMPDU_RETRY);
>                 rtl8xxxu_write32(priv, REG_FAST_EDCA_CTRL, 0x03086666);
>         }
> -       /*
> -        * The RTL8710BU vendor driver uses 0x50 here and it works fine,
> -        * but in rtl8xxxu 0x50 causes slow upload and random packet loss. Why?
> -        */
> -       if (priv->rtl_chip == RTL8723B)
> -               val8 = 0x50;
> -       else if (priv->rtl_chip == RTL8188F || priv->rtl_chip == RTL8710B)
> -               val8 = 0x28; /* 0x50 would make the upload slow */
> -       rtl8xxxu_write8(priv, REG_USTIME_TSF_8723B, val8);
> -       rtl8xxxu_write8(priv, REG_USTIME_EDCA, val8);
> +       rtl8xxxu_write8(priv, REG_USTIME_TSF_8723B, priv->fops->ustime_tsf_edca);
> +       rtl8xxxu_write8(priv, REG_USTIME_EDCA, priv->fops->ustime_tsf_edca);
> 
>         /* to prevent mac is reseted by bus. */
>         val8 = rtl8xxxu_read8(priv, REG_RSV_CTRL);
> @@ -4102,7 +4091,7 @@ static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
>                 RCR_APPEND_PHYSTAT | RCR_APPEND_ICV | RCR_APPEND_MIC;
>         rtl8xxxu_write32(priv, REG_RCR, val32);
> 
> -       if (priv->rtl_chip == RTL8188F || priv->rtl_chip == RTL8710B) {
> +       if (fops->init_reg_rxfltmap) {
>                 /* Accept all data frames */
>                 rtl8xxxu_write16(priv, REG_RXFLTMAP2, 0xffff);
> 
> @@ -4187,8 +4176,7 @@ static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
>         if (fops->init_aggregation)
>                 fops->init_aggregation(priv);
> 
> -       if (priv->rtl_chip == RTL8188F || priv->rtl_chip == RTL8188E ||
> -           priv->rtl_chip == RTL8710B) {
> +       if (fops->init_reg_pkt_life_time) {
>                 rtl8xxxu_write16(priv, REG_PKT_VO_VI_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */
>                 rtl8xxxu_write16(priv, REG_PKT_BE_BK_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */
>         }
> --
> 2.39.2
> 
> ------Please consider the environment before printing this e-mail.




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux