> -----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.