Message ID | 2479507e-3946-492f-857e-83e54969aad2@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Ping-Ke Shih |
Headers | show |
Series | [v2] wifi: rtw88: usb: Simplify rtw_usb_write_data | expand |
On 5/3/24 5:53 AM, Bitterblue Smith wrote: > The skb created in this function always has the same headroom, > the chip's TX descriptor size. (pkt_info->offset is set by > rtw_usb_write_data_rsvd_page() to chip->tx_pkt_desc_sz.) Use > chip->tx_pkt_desc_sz directly. > > Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> > --- > v2: > - Don't touch rtw_usb_write_data_rsvd_page(). It needs to set > pkt_info.offset after all, otherwise RTL8822BU and RTL8821CU fail > to upload the firmware: > > --- > drivers/net/wireless/realtek/rtw88/usb.c | 12 +++++------- > 1 file changed, 5 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c > index 1dfe7c6ae4ba..a28f35a03b26 100644 > --- a/drivers/net/wireless/realtek/rtw88/usb.c > +++ b/drivers/net/wireless/realtek/rtw88/usb.c > @@ -440,23 +440,21 @@ static int rtw_usb_write_data(struct rtw_dev *rtwdev, > { > const struct rtw_chip_info *chip = rtwdev->chip; > struct sk_buff *skb; > - unsigned int desclen, headsize, size; > + unsigned int size; > u8 qsel; > int ret = 0; > > size = pkt_info->tx_pkt_size; > qsel = pkt_info->qsel; > - desclen = chip->tx_pkt_desc_sz; > - headsize = pkt_info->offset ? pkt_info->offset : desclen; > > - skb = dev_alloc_skb(headsize + size); > + skb = dev_alloc_skb(chip->tx_pkt_desc_sz + size); > if (unlikely(!skb)) > return -ENOMEM; > > - skb_reserve(skb, headsize); > + skb_reserve(skb, chip->tx_pkt_desc_sz); > skb_put_data(skb, buf, size); > - skb_push(skb, headsize); > - memset(skb->data, 0, headsize); > + skb_push(skb, chip->tx_pkt_desc_sz); > + memset(skb->data, 0, chip->tx_pkt_desc_sz); > rtw_tx_fill_tx_desc(pkt_info, skb); > rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data); > This one works with the 8822bu. Tested-by: Larry Finger <Larry.Finger@lwfinger.net> Thanks, Larry
Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote: > The skb created in this function always has the same headroom, > the chip's TX descriptor size. (pkt_info->offset is set by > rtw_usb_write_data_rsvd_page() to chip->tx_pkt_desc_sz.) Use > chip->tx_pkt_desc_sz directly. > > Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> > Tested-by: Larry Finger <Larry.Finger@lwfinger.net> 1 patch(es) applied to rtw-next branch of rtw.git, thanks. a892f6ffbec7 wifi: rtw88: usb: Simplify rtw_usb_write_data --- https://github.com/pkshih/rtw.git
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c index 1dfe7c6ae4ba..a28f35a03b26 100644 --- a/drivers/net/wireless/realtek/rtw88/usb.c +++ b/drivers/net/wireless/realtek/rtw88/usb.c @@ -440,23 +440,21 @@ static int rtw_usb_write_data(struct rtw_dev *rtwdev, { const struct rtw_chip_info *chip = rtwdev->chip; struct sk_buff *skb; - unsigned int desclen, headsize, size; + unsigned int size; u8 qsel; int ret = 0; size = pkt_info->tx_pkt_size; qsel = pkt_info->qsel; - desclen = chip->tx_pkt_desc_sz; - headsize = pkt_info->offset ? pkt_info->offset : desclen; - skb = dev_alloc_skb(headsize + size); + skb = dev_alloc_skb(chip->tx_pkt_desc_sz + size); if (unlikely(!skb)) return -ENOMEM; - skb_reserve(skb, headsize); + skb_reserve(skb, chip->tx_pkt_desc_sz); skb_put_data(skb, buf, size); - skb_push(skb, headsize); - memset(skb->data, 0, headsize); + skb_push(skb, chip->tx_pkt_desc_sz); + memset(skb->data, 0, chip->tx_pkt_desc_sz); rtw_tx_fill_tx_desc(pkt_info, skb); rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
The skb created in this function always has the same headroom, the chip's TX descriptor size. (pkt_info->offset is set by rtw_usb_write_data_rsvd_page() to chip->tx_pkt_desc_sz.) Use chip->tx_pkt_desc_sz directly. Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> --- v2: - Don't touch rtw_usb_write_data_rsvd_page(). It needs to set pkt_info.offset after all, otherwise RTL8822BU and RTL8821CU fail to upload the firmware: --- drivers/net/wireless/realtek/rtw88/usb.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)