Search Linux Wireless

Re: [PATCH 6/7] wifi: rtw88: Extend TX power stuff for 3-4 spatial streams

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

 



Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> wrote:

> Although the RTL8814AU only has 3 spatial streams, maybe some other chip
> has 4.
> 
> Correct the TX power index and TX power limit calculations for 3SS and
> 4SS HT/VHT rates.
> 
> With this the RTL8814AU can set the TX power correctly.
> 
> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx>
> ---
> I just realised this patch depends on another pending patch:
> https://lore.kernel.org/linux-wireless/8a60f581-0ab5-4d98-a97d-dd83b605008f@xxxxxxxxx/
> 
> Originally this patch was going to be in part 2, but then I rearranged
> them. Too late to turn back now...

Next time, if you want rearrange two or more patchset, just ask me to
drop all patches and re-send with increasing version number. 

> ---
>  drivers/net/wireless/realtek/rtw88/main.h     |   4 +
>  drivers/net/wireless/realtek/rtw88/phy.c      | 149 ++++++++++++------
>  drivers/net/wireless/realtek/rtw88/phy.h      |   4 +
>  drivers/net/wireless/realtek/rtw88/rtw8821c.c |   2 +-
>  drivers/net/wireless/realtek/rtw88/rtw8822b.c |   2 +-
>  drivers/net/wireless/realtek/rtw88/rtw8822c.c |   2 +-
>  drivers/net/wireless/realtek/rtw88/rtw88xxa.c |   2 +-
>  7 files changed, 114 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
> index ba64d269521a..bbae6d7c1aa9 100644
> --- a/drivers/net/wireless/realtek/rtw88/main.h
> +++ b/drivers/net/wireless/realtek/rtw88/main.h
> @@ -166,6 +166,10 @@ enum rtw_rate_section {
>         RTW_RATE_SECTION_HT_2S,
>         RTW_RATE_SECTION_VHT_1S,
>         RTW_RATE_SECTION_VHT_2S,

Suggest to add a 
          __RTW_RATE_SECTION_2SS_MAX = RTW_RATE_SECTION_VHT_2S,
          or
          __RTW_RATE_SECTION_2SS_NUM = RTW_RATE_SECTION_HT_3S,
          (Be careful the place, enumerator will increase automatically)

(The suffix of existing RTW_RATE_SECTION_MAX is wrong -- _NUM instead of _MAX)

> +       RTW_RATE_SECTION_HT_3S,
> +       RTW_RATE_SECTION_HT_4S,
> +       RTW_RATE_SECTION_VHT_3S,
> +       RTW_RATE_SECTION_VHT_4S,
> 
>         /* keep last */
>         RTW_RATE_SECTION_MAX,
> diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c
> index 8ed20c89d216..5ddc9d4988b8 100644
> --- a/drivers/net/wireless/realtek/rtw88/phy.c
> +++ b/drivers/net/wireless/realtek/rtw88/phy.c
> @@ -53,21 +53,25 @@ static const u32 db_invert_table[12][8] = {
>  };
> 
>  u8 rtw_cck_rates[] = { DESC_RATE1M, DESC_RATE2M, DESC_RATE5_5M, DESC_RATE11M };
> +
>  u8 rtw_ofdm_rates[] = {
>         DESC_RATE6M,  DESC_RATE9M,  DESC_RATE12M,
>         DESC_RATE18M, DESC_RATE24M, DESC_RATE36M,
>         DESC_RATE48M, DESC_RATE54M
>  };
> +
>  u8 rtw_ht_1s_rates[] = {
>         DESC_RATEMCS0, DESC_RATEMCS1, DESC_RATEMCS2,
>         DESC_RATEMCS3, DESC_RATEMCS4, DESC_RATEMCS5,
>         DESC_RATEMCS6, DESC_RATEMCS7
>  };
> +
>  u8 rtw_ht_2s_rates[] = {
>         DESC_RATEMCS8,  DESC_RATEMCS9,  DESC_RATEMCS10,
>         DESC_RATEMCS11, DESC_RATEMCS12, DESC_RATEMCS13,
>         DESC_RATEMCS14, DESC_RATEMCS15
>  };
> +
>  u8 rtw_vht_1s_rates[] = {
>         DESC_RATEVHT1SS_MCS0, DESC_RATEVHT1SS_MCS1,
>         DESC_RATEVHT1SS_MCS2, DESC_RATEVHT1SS_MCS3,
> @@ -75,6 +79,7 @@ u8 rtw_vht_1s_rates[] = {
>         DESC_RATEVHT1SS_MCS6, DESC_RATEVHT1SS_MCS7,
>         DESC_RATEVHT1SS_MCS8, DESC_RATEVHT1SS_MCS9
>  };
> +
>  u8 rtw_vht_2s_rates[] = {
>         DESC_RATEVHT2SS_MCS0, DESC_RATEVHT2SS_MCS1,
>         DESC_RATEVHT2SS_MCS2, DESC_RATEVHT2SS_MCS3,
> @@ -82,10 +87,41 @@ u8 rtw_vht_2s_rates[] = {
>         DESC_RATEVHT2SS_MCS6, DESC_RATEVHT2SS_MCS7,
>         DESC_RATEVHT2SS_MCS8, DESC_RATEVHT2SS_MCS9
>  };
> +
> +u8 rtw_ht_3s_rates[] = {
> +       DESC_RATEMCS16, DESC_RATEMCS17, DESC_RATEMCS18,
> +       DESC_RATEMCS19, DESC_RATEMCS20, DESC_RATEMCS21,
> +       DESC_RATEMCS22, DESC_RATEMCS23
> +};
> +
> +u8 rtw_ht_4s_rates[] = {
> +       DESC_RATEMCS24, DESC_RATEMCS25, DESC_RATEMCS26,
> +       DESC_RATEMCS27, DESC_RATEMCS28, DESC_RATEMCS29,
> +       DESC_RATEMCS30, DESC_RATEMCS31
> +};
> +
> +u8 rtw_vht_3s_rates[] = {
> +       DESC_RATEVHT3SS_MCS0, DESC_RATEVHT3SS_MCS1,
> +       DESC_RATEVHT3SS_MCS2, DESC_RATEVHT3SS_MCS3,
> +       DESC_RATEVHT3SS_MCS4, DESC_RATEVHT3SS_MCS5,
> +       DESC_RATEVHT3SS_MCS6, DESC_RATEVHT3SS_MCS7,
> +       DESC_RATEVHT3SS_MCS8, DESC_RATEVHT3SS_MCS9
> +};
> +
> +u8 rtw_vht_4s_rates[] = {
> +       DESC_RATEVHT4SS_MCS0, DESC_RATEVHT4SS_MCS1,
> +       DESC_RATEVHT4SS_MCS2, DESC_RATEVHT4SS_MCS3,
> +       DESC_RATEVHT4SS_MCS4, DESC_RATEVHT4SS_MCS5,
> +       DESC_RATEVHT4SS_MCS6, DESC_RATEVHT4SS_MCS7,
> +       DESC_RATEVHT4SS_MCS8, DESC_RATEVHT4SS_MCS9
> +};
> +
>  u8 *rtw_rate_section[RTW_RATE_SECTION_MAX] = {
>         rtw_cck_rates, rtw_ofdm_rates,
>         rtw_ht_1s_rates, rtw_ht_2s_rates,
> -       rtw_vht_1s_rates, rtw_vht_2s_rates
> +       rtw_vht_1s_rates, rtw_vht_2s_rates,
> +       rtw_ht_3s_rates, rtw_ht_4s_rates,
> +       rtw_vht_3s_rates, rtw_vht_4s_rates
>  };
>  EXPORT_SYMBOL(rtw_rate_section);
> 
> @@ -95,17 +131,14 @@ u8 rtw_rate_size[RTW_RATE_SECTION_MAX] = {
>         ARRAY_SIZE(rtw_ht_1s_rates),
>         ARRAY_SIZE(rtw_ht_2s_rates),
>         ARRAY_SIZE(rtw_vht_1s_rates),
> -       ARRAY_SIZE(rtw_vht_2s_rates)
> +       ARRAY_SIZE(rtw_vht_2s_rates),
> +       ARRAY_SIZE(rtw_ht_3s_rates),
> +       ARRAY_SIZE(rtw_ht_4s_rates),
> +       ARRAY_SIZE(rtw_vht_3s_rates),
> +       ARRAY_SIZE(rtw_vht_4s_rates)
>  };
>  EXPORT_SYMBOL(rtw_rate_size);
> 
> -static const u8 rtw_cck_size = ARRAY_SIZE(rtw_cck_rates);
> -static const u8 rtw_ofdm_size = ARRAY_SIZE(rtw_ofdm_rates);
> -static const u8 rtw_ht_1s_size = ARRAY_SIZE(rtw_ht_1s_rates);
> -static const u8 rtw_ht_2s_size = ARRAY_SIZE(rtw_ht_2s_rates);
> -static const u8 rtw_vht_1s_size = ARRAY_SIZE(rtw_vht_1s_rates);
> -static const u8 rtw_vht_2s_size = ARRAY_SIZE(rtw_vht_2s_rates);
> -
>  enum rtw_phy_band_type {
>         PHY_BAND_2G     = 0,
>         PHY_BAND_5G     = 1,
> @@ -1635,10 +1668,12 @@ static void
>  rtw_xref_txpwr_lmt_by_rs(struct rtw_dev *rtwdev, u8 regd, u8 bw, u8 ch_idx)
>  {
>         u8 rs_idx, rs_ht, rs_vht;
> -       u8 rs_cmp[2][2] = {{RTW_RATE_SECTION_HT_1S, RTW_RATE_SECTION_VHT_1S},
> -                          {RTW_RATE_SECTION_HT_2S, RTW_RATE_SECTION_VHT_2S} };
> +       u8 rs_cmp[4][2] = {{RTW_RATE_SECTION_HT_1S, RTW_RATE_SECTION_VHT_1S},
> +                          {RTW_RATE_SECTION_HT_2S, RTW_RATE_SECTION_VHT_2S},
> +                          {RTW_RATE_SECTION_HT_3S, RTW_RATE_SECTION_VHT_3S},
> +                          {RTW_RATE_SECTION_HT_4S, RTW_RATE_SECTION_VHT_4S} };

Can be 'static const' by the way. 

> 
> -       for (rs_idx = 0; rs_idx < 2; rs_idx++) {
> +       for (rs_idx = 0; rs_idx < 4; rs_idx++) {
>                 rs_ht = rs_cmp[rs_idx][0];
>                 rs_vht = rs_cmp[rs_idx][1];
> 

[...]

> diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.c b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
> index cc152248407c..106a9e38e428 100644
> --- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
> +++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
> @@ -709,7 +709,7 @@ static void rtw8821c_set_tx_power_index(struct rtw_dev *rtwdev)
>         int rs, path;
> 
>         for (path = 0; path < hal->rf_path_num; path++) {
> -               for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) {
> +               for (rs = 0; rs < RTW_RATE_SECTION_HT_3S; rs++) {

As mentioned above,
        rs < __RTW_RATE_SECTION_2SS_NUM
        or
        rs <= __RTW_RATE_SECTION_2SS_MAX

>                         if (rs == RTW_RATE_SECTION_HT_2S ||
>                             rs == RTW_RATE_SECTION_VHT_2S)
>                                 continue;





[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