]> git.ipfire.org Git - thirdparty/openwrt.git/blob
7d77e0e67173e7e8c44bdce86d80418ab0c536ee
[thirdparty/openwrt.git] /
1 From 82a617413e8545775ec03a1970809ac5f549ef32 Mon Sep 17 00:00:00 2001
2 From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
3 Date: Wed, 23 Oct 2024 17:12:06 +0300
4 Subject: [PATCH] wifi: rtw88: Support TX page sizes bigger than 128
5
6 All the chips supported so far have a TX page size of 128 bytes.
7
8 Change the type of the page_size member of struct rtw_chip_info from u8
9 to u16 in order to support RTL8821AU (page size of 256 bytes) and
10 RTL8812AU (page size of 512 bytes). Also change the types of several
11 related variables and function parameters from u8 to u16.
12
13 The TX page size is used, among other things, to construct the beacon,
14 null data, QOS null data, and PS poll templates which are uploaded to
15 the chip's reserved page. Each template needs to be aligned on a
16 multiple of the TX page size. Power saving can't work if the TX page
17 size is wrong.
18
19 Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
20 Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
21 Link: https://patch.msgid.link/acdefbb1-3daf-4349-9e03-9472754d5f1e@gmail.com
22 ---
23 drivers/net/wireless/realtek/rtw88/debug.c | 2 +-
24 drivers/net/wireless/realtek/rtw88/fw.c | 21 +++++++++++----------
25 drivers/net/wireless/realtek/rtw88/mac.c | 2 +-
26 drivers/net/wireless/realtek/rtw88/main.h | 2 +-
27 4 files changed, 14 insertions(+), 13 deletions(-)
28
29 --- a/drivers/net/wireless/realtek/rtw88/debug.c
30 +++ b/drivers/net/wireless/realtek/rtw88/debug.c
31 @@ -308,7 +308,7 @@ static int rtw_debugfs_get_rsvd_page(str
32 {
33 struct rtw_debugfs_priv *debugfs_priv = m->private;
34 struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
35 - u8 page_size = rtwdev->chip->page_size;
36 + u16 page_size = rtwdev->chip->page_size;
37 u32 buf_size = debugfs_priv->rsvd_page.page_num * page_size;
38 u32 offset = debugfs_priv->rsvd_page.page_offset * page_size;
39 u8 *buf;
40 --- a/drivers/net/wireless/realtek/rtw88/fw.c
41 +++ b/drivers/net/wireless/realtek/rtw88/fw.c
42 @@ -1293,13 +1293,13 @@ static void rtw_fill_rsvd_page_desc(stru
43 rtw_tx_fill_tx_desc(rtwdev, &pkt_info, skb);
44 }
45
46 -static inline u8 rtw_len_to_page(unsigned int len, u8 page_size)
47 +static inline u8 rtw_len_to_page(unsigned int len, u16 page_size)
48 {
49 return DIV_ROUND_UP(len, page_size);
50 }
51
52 -static void rtw_rsvd_page_list_to_buf(struct rtw_dev *rtwdev, u8 page_size,
53 - u8 page_margin, u32 page, u8 *buf,
54 +static void rtw_rsvd_page_list_to_buf(struct rtw_dev *rtwdev, u16 page_size,
55 + u16 page_margin, u32 page, u8 *buf,
56 struct rtw_rsvd_page *rsvd_pkt)
57 {
58 struct sk_buff *skb = rsvd_pkt->skb;
59 @@ -1601,13 +1601,13 @@ static int __rtw_build_rsvd_page_from_v
60
61 static u8 *rtw_build_rsvd_page(struct rtw_dev *rtwdev, u32 *size)
62 {
63 - struct ieee80211_hw *hw = rtwdev->hw;
64 const struct rtw_chip_info *chip = rtwdev->chip;
65 - struct sk_buff *iter;
66 + struct ieee80211_hw *hw = rtwdev->hw;
67 struct rtw_rsvd_page *rsvd_pkt;
68 - u32 page = 0;
69 + struct sk_buff *iter;
70 + u16 page_size, page_margin, tx_desc_sz;
71 u8 total_page = 0;
72 - u8 page_size, page_margin, tx_desc_sz;
73 + u32 page = 0;
74 u8 *buf;
75 int ret;
76
77 @@ -2013,12 +2013,13 @@ static int _rtw_hw_scan_update_probe_req
78 {
79 const struct rtw_chip_info *chip = rtwdev->chip;
80 struct sk_buff *skb, *tmp;
81 - u8 page_offset = 1, *buf, page_size = chip->page_size;
82 u16 pg_addr = rtwdev->fifo.rsvd_h2c_info_addr, loc;
83 - u16 buf_offset = page_size * page_offset;
84 u8 tx_desc_sz = chip->tx_pkt_desc_sz;
85 - u8 page_cnt, pages;
86 + u16 page_size = chip->page_size;
87 + u8 page_offset = 1, *buf;
88 + u16 buf_offset = page_size * page_offset;
89 unsigned int pkt_len;
90 + u8 page_cnt, pages;
91 int ret;
92
93 if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM))
94 --- a/drivers/net/wireless/realtek/rtw88/mac.c
95 +++ b/drivers/net/wireless/realtek/rtw88/mac.c
96 @@ -1138,7 +1138,7 @@ int rtw_set_trx_fifo_info(struct rtw_dev
97
98 /* config rsvd page num */
99 fifo->rsvd_drv_pg_num = chip->rsvd_drv_pg_num;
100 - fifo->txff_pg_num = chip->txff_size >> 7;
101 + fifo->txff_pg_num = chip->txff_size / chip->page_size;
102 if (rtw_chip_wcpu_11n(rtwdev))
103 fifo->rsvd_pg_num = fifo->rsvd_drv_pg_num;
104 else
105 --- a/drivers/net/wireless/realtek/rtw88/main.h
106 +++ b/drivers/net/wireless/realtek/rtw88/main.h
107 @@ -1187,7 +1187,7 @@ struct rtw_chip_info {
108 u32 fw_rxff_size;
109 u16 rsvd_drv_pg_num;
110 u8 band;
111 - u8 page_size;
112 + u16 page_size;
113 u8 csi_buf_pg_num;
114 u8 dig_max;
115 u8 dig_min;