aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2019-09-14 09:08:18 -0400
committerDavid S. Miller <davem@davemloft.net>2019-09-14 09:08:18 -0400
commita3d3c74da49c65fc63a937fa559186b0e16adca3 (patch)
tree946a98b1350387ee8c6ee8d6572864c838b20191
parent1ba569fc2250b7717fcf3b943efe043c98c6a919 (diff)
parentf9e568754562e0f506e12aa899c378b4155080e9 (diff)
Merge tag 'wireless-drivers-next-for-davem-2019-09-14' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for 5.4 Last set of patches for 5.4. wil6210 and rtw88 being most active this time, but ath9k also having a new module to load devices without EEPROM. Major changes: wil6210 * add support for Enhanced Directional Multi-Gigabit (EDMG) channels 9-11 * add debugfs file to show PCM ring content * report boottime_ns in scan results ath9k * add a separate loader for AR92XX (and older) pci(e) without eeprom brcmfmac * use the same wiphy after PCIe reset to not confuse the user space rtw88 * enable interrupt migration * enable AMSDU in AMPDU aggregation * report RX power for each antenna * enable to DPK and IQK calibration methods to improve performance ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--CREDITS2
-rw-r--r--drivers/bcma/sprom.c10
-rw-r--r--drivers/net/wireless/ath/ath10k/htt_rx.c91
-rw-r--r--drivers/net/wireless/ath/ath10k/htt_tx.c8
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c9
-rw-r--r--drivers/net/wireless/ath/ath10k/sdio.c29
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-tlv.c2
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-tlv.h16
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.h8
-rw-r--r--drivers/net/wireless/ath/ath6kl/htc_mbox.c4
-rw-r--r--drivers/net/wireless/ath/ath6kl/usb.c8
-rw-r--r--drivers/net/wireless/ath/ath9k/Kconfig16
-rw-r--r--drivers/net/wireless/ath/ath9k/Makefile2
-rw-r--r--drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c215
-rw-r--r--drivers/net/wireless/ath/ath9k/dynack.c101
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_init.c4
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_hst.c3
-rw-r--r--drivers/net/wireless/ath/ath9k/wmi.c1
-rw-r--r--drivers/net/wireless/ath/carl9170/usb.c2
-rw-r--r--drivers/net/wireless/ath/wcn36xx/smd.c186
-rw-r--r--drivers/net/wireless/ath/wil6210/cfg80211.c221
-rw-r--r--drivers/net/wireless/ath/wil6210/debugfs.c16
-rw-r--r--drivers/net/wireless/ath/wil6210/main.c4
-rw-r--r--drivers/net/wireless/ath/wil6210/netdev.c4
-rw-r--r--drivers/net/wireless/ath/wil6210/pcie_bus.c4
-rw-r--r--drivers/net/wireless/ath/wil6210/pmc.c26
-rw-r--r--drivers/net/wireless/ath/wil6210/pmc.h1
-rw-r--r--drivers/net/wireless/ath/wil6210/rx_reorder.c1
-rw-r--r--drivers/net/wireless/ath/wil6210/txrx.c244
-rw-r--r--drivers/net/wireless/ath/wil6210/txrx.h42
-rw-r--r--drivers/net/wireless/ath/wil6210/txrx_edma.c40
-rw-r--r--drivers/net/wireless/ath/wil6210/txrx_edma.h12
-rw-r--r--drivers/net/wireless/ath/wil6210/wil6210.h25
-rw-r--r--drivers/net/wireless/ath/wil6210/wmi.c43
-rw-r--r--drivers/net/wireless/ath/wil6210/wmi.h29
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h4
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c1
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h1
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c42
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h1
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c13
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c15
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c34
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c14
-rw-r--r--drivers/net/wireless/marvell/libertas/dev.h2
-rw-r--r--drivers/net/wireless/marvell/libertas/mesh.c31
-rw-r--r--drivers/net/wireless/marvell/libertas/mesh.h3
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/base.h27
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8188ee/def.h29
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192ce/def.h33
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c23
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192cu/mac.c18
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192de/def.h31
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c18
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8723ae/def.h31
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c212
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h794
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c236
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h718
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8821ae/def.h31
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c4
-rw-r--r--drivers/net/wireless/realtek/rtw88/coex.c2
-rw-r--r--drivers/net/wireless/realtek/rtw88/coex.h1
-rw-r--r--drivers/net/wireless/realtek/rtw88/mac80211.c2
-rw-r--r--drivers/net/wireless/realtek/rtw88/main.c1
-rw-r--r--drivers/net/wireless/realtek/rtw88/main.h56
-rw-r--r--drivers/net/wireless/realtek/rtw88/phy.c145
-rw-r--r--drivers/net/wireless/realtek/rtw88/phy.h2
-rw-r--r--drivers/net/wireless/realtek/rtw88/reg.h17
-rw-r--r--drivers/net/wireless/realtek/rtw88/rtw8822b.c8
-rw-r--r--drivers/net/wireless/realtek/rtw88/rtw8822c.c1188
-rw-r--r--drivers/net/wireless/realtek/rtw88/rtw8822c.h86
-rw-r--r--drivers/net/wireless/realtek/rtw88/rtw8822c_table.c6762
-rw-r--r--drivers/net/wireless/realtek/rtw88/rtw8822c_table.h3
-rw-r--r--drivers/net/wireless/realtek/rtw88/rx.c5
-rw-r--r--drivers/ssb/pci.c2
76 files changed, 8505 insertions, 3570 deletions
diff --git a/CREDITS b/CREDITS
index a7387605fbdc..8b67a85844b5 100644
--- a/CREDITS
+++ b/CREDITS
@@ -751,7 +751,7 @@ S: Santa Cruz, California
751S: USA 751S: USA
752 752
753N: Luis Correia 753N: Luis Correia
754E: lfcorreia@users.sf.net 754E: luisfcorreia@gmail.com
755D: Ralink rt2x00 WLAN driver 755D: Ralink rt2x00 WLAN driver
756S: Belas, Portugal 756S: Belas, Portugal
757 757
diff --git a/drivers/bcma/sprom.c b/drivers/bcma/sprom.c
index 206edd3ba668..bd2c923a6586 100644
--- a/drivers/bcma/sprom.c
+++ b/drivers/bcma/sprom.c
@@ -222,7 +222,7 @@ static void bcma_sprom_extract_r8(struct bcma_bus *bus, const u16 *sprom)
222{ 222{
223 u16 v, o; 223 u16 v, o;
224 int i; 224 int i;
225 u16 pwr_info_offset[] = { 225 static const u16 pwr_info_offset[] = {
226 SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 226 SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1,
227 SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 227 SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3
228 }; 228 };
@@ -578,9 +578,11 @@ int bcma_sprom_get(struct bcma_bus *bus)
578{ 578{
579 u16 offset = BCMA_CC_SPROM; 579 u16 offset = BCMA_CC_SPROM;
580 u16 *sprom; 580 u16 *sprom;
581 size_t sprom_sizes[] = { SSB_SPROMSIZE_WORDS_R4, 581 static const size_t sprom_sizes[] = {
582 SSB_SPROMSIZE_WORDS_R10, 582 SSB_SPROMSIZE_WORDS_R4,
583 SSB_SPROMSIZE_WORDS_R11, }; 583 SSB_SPROMSIZE_WORDS_R10,
584 SSB_SPROMSIZE_WORDS_R11,
585 };
584 int i, err = 0; 586 int i, err = 0;
585 587
586 if (!bus->drv_cc.core) 588 if (!bus->drv_cc.core)
diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
index 83a7fb68fd24..53f1095de8ff 100644
--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
@@ -2151,6 +2151,10 @@ static bool ath10k_htt_rx_proc_rx_ind_hl(struct ath10k_htt *htt,
2151 struct ath10k_peer *peer; 2151 struct ath10k_peer *peer;
2152 struct htt_rx_indication_mpdu_range *mpdu_ranges; 2152 struct htt_rx_indication_mpdu_range *mpdu_ranges;
2153 struct fw_rx_desc_hl *fw_desc; 2153 struct fw_rx_desc_hl *fw_desc;
2154 enum htt_txrx_sec_cast_type sec_index;
2155 enum htt_security_types sec_type;
2156 union htt_rx_pn_t new_pn = {0};
2157 struct htt_hl_rx_desc *rx_desc;
2154 struct ieee80211_hdr *hdr; 2158 struct ieee80211_hdr *hdr;
2155 struct ieee80211_rx_status *rx_status; 2159 struct ieee80211_rx_status *rx_status;
2156 u16 peer_id; 2160 u16 peer_id;
@@ -2158,9 +2162,11 @@ static bool ath10k_htt_rx_proc_rx_ind_hl(struct ath10k_htt *htt,
2158 int num_mpdu_ranges; 2162 int num_mpdu_ranges;
2159 size_t tot_hdr_len; 2163 size_t tot_hdr_len;
2160 struct ieee80211_channel *ch; 2164 struct ieee80211_channel *ch;
2161 bool pn_invalid; 2165 bool pn_invalid, qos, first_msdu;
2166 u32 tid, rx_desc_info;
2162 2167
2163 peer_id = __le16_to_cpu(rx->hdr.peer_id); 2168 peer_id = __le16_to_cpu(rx->hdr.peer_id);
2169 tid = MS(rx->hdr.info0, HTT_RX_INDICATION_INFO0_EXT_TID);
2164 2170
2165 spin_lock_bh(&ar->data_lock); 2171 spin_lock_bh(&ar->data_lock);
2166 peer = ath10k_peer_find_by_id(ar, peer_id); 2172 peer = ath10k_peer_find_by_id(ar, peer_id);
@@ -2168,6 +2174,9 @@ static bool ath10k_htt_rx_proc_rx_ind_hl(struct ath10k_htt *htt,
2168 if (!peer && peer_id != HTT_INVALID_PEERID) 2174 if (!peer && peer_id != HTT_INVALID_PEERID)
2169 ath10k_warn(ar, "Got RX ind from invalid peer: %u\n", peer_id); 2175 ath10k_warn(ar, "Got RX ind from invalid peer: %u\n", peer_id);
2170 2176
2177 if (!peer)
2178 return true;
2179
2171 num_mpdu_ranges = MS(__le32_to_cpu(rx->hdr.info1), 2180 num_mpdu_ranges = MS(__le32_to_cpu(rx->hdr.info1),
2172 HTT_RX_INDICATION_INFO1_NUM_MPDU_RANGES); 2181 HTT_RX_INDICATION_INFO1_NUM_MPDU_RANGES);
2173 mpdu_ranges = htt_rx_ind_get_mpdu_ranges_hl(rx); 2182 mpdu_ranges = htt_rx_ind_get_mpdu_ranges_hl(rx);
@@ -2192,10 +2201,24 @@ static bool ath10k_htt_rx_proc_rx_ind_hl(struct ath10k_htt *htt,
2192 goto err; 2201 goto err;
2193 } 2202 }
2194 2203
2195 if (check_pn_type == HTT_RX_PN_CHECK) { 2204 rx_desc = (struct htt_hl_rx_desc *)&rx->mpdu_ranges[num_mpdu_ranges];
2205 rx_desc_info = __le32_to_cpu(rx_desc->info);
2206
2207 if (MS(rx_desc_info, HTT_RX_DESC_HL_INFO_MCAST_BCAST))
2208 sec_index = HTT_TXRX_SEC_MCAST;
2209 else
2210 sec_index = HTT_TXRX_SEC_UCAST;
2211
2212 sec_type = peer->rx_pn[sec_index].sec_type;
2213 first_msdu = rx->fw_desc.flags & FW_RX_DESC_FLAGS_FIRST_MSDU;
2214
2215 ath10k_htt_rx_mpdu_desc_pn_hl(rx_desc, &new_pn, peer->rx_pn[sec_index].pn_len);
2216
2217 if (check_pn_type == HTT_RX_PN_CHECK && tid >= IEEE80211_NUM_TIDS) {
2196 spin_lock_bh(&ar->data_lock); 2218 spin_lock_bh(&ar->data_lock);
2197 pn_invalid = ath10k_htt_rx_pn_check_replay_hl(ar, peer, rx); 2219 pn_invalid = ath10k_htt_rx_pn_check_replay_hl(ar, peer, rx);
2198 spin_unlock_bh(&ar->data_lock); 2220 spin_unlock_bh(&ar->data_lock);
2221
2199 if (pn_invalid) 2222 if (pn_invalid)
2200 goto err; 2223 goto err;
2201 } 2224 }
@@ -2211,6 +2234,7 @@ static bool ath10k_htt_rx_proc_rx_ind_hl(struct ath10k_htt *htt,
2211 skb_pull(skb, tot_hdr_len); 2234 skb_pull(skb, tot_hdr_len);
2212 2235
2213 hdr = (struct ieee80211_hdr *)skb->data; 2236 hdr = (struct ieee80211_hdr *)skb->data;
2237 qos = ieee80211_is_data_qos(hdr->frame_control);
2214 rx_status = IEEE80211_SKB_RXCB(skb); 2238 rx_status = IEEE80211_SKB_RXCB(skb);
2215 rx_status->chains |= BIT(0); 2239 rx_status->chains |= BIT(0);
2216 if (rx->ppdu.combined_rssi == 0) { 2240 if (rx->ppdu.combined_rssi == 0) {
@@ -2254,6 +2278,55 @@ static bool ath10k_htt_rx_proc_rx_ind_hl(struct ath10k_htt *htt,
2254 rx_status->flag |= RX_FLAG_DECRYPTED | 2278 rx_status->flag |= RX_FLAG_DECRYPTED |
2255 RX_FLAG_IV_STRIPPED | 2279 RX_FLAG_IV_STRIPPED |
2256 RX_FLAG_MMIC_STRIPPED; 2280 RX_FLAG_MMIC_STRIPPED;
2281
2282 if (tid < IEEE80211_NUM_TIDS &&
2283 first_msdu &&
2284 check_pn_type == HTT_RX_PN_CHECK &&
2285 (sec_type == HTT_SECURITY_AES_CCMP ||
2286 sec_type == HTT_SECURITY_TKIP ||
2287 sec_type == HTT_SECURITY_TKIP_NOMIC)) {
2288 u8 offset, *ivp, i;
2289 s8 keyidx = 0;
2290 __le64 pn48 = cpu_to_le64(new_pn.pn48);
2291
2292 hdr = (struct ieee80211_hdr *)skb->data;
2293 offset = ieee80211_hdrlen(hdr->frame_control);
2294 hdr->frame_control |= __cpu_to_le16(IEEE80211_FCTL_PROTECTED);
2295 rx_status->flag &= ~RX_FLAG_IV_STRIPPED;
2296
2297 memmove(skb->data - IEEE80211_CCMP_HDR_LEN,
2298 skb->data, offset);
2299 skb_push(skb, IEEE80211_CCMP_HDR_LEN);
2300 ivp = skb->data + offset;
2301 memset(skb->data + offset, 0, IEEE80211_CCMP_HDR_LEN);
2302 /* Ext IV */
2303 ivp[IEEE80211_WEP_IV_LEN - 1] |= ATH10K_IEEE80211_EXTIV;
2304
2305 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) {
2306 if (peer->keys[i] &&
2307 peer->keys[i]->flags & IEEE80211_KEY_FLAG_PAIRWISE)
2308 keyidx = peer->keys[i]->keyidx;
2309 }
2310
2311 /* Key ID */
2312 ivp[IEEE80211_WEP_IV_LEN - 1] |= keyidx << 6;
2313
2314 if (sec_type == HTT_SECURITY_AES_CCMP) {
2315 rx_status->flag |= RX_FLAG_MIC_STRIPPED;
2316 /* pn 0, pn 1 */
2317 memcpy(skb->data + offset, &pn48, 2);
2318 /* pn 1, pn 3 , pn 34 , pn 5 */
2319 memcpy(skb->data + offset + 4, ((u8 *)&pn48) + 2, 4);
2320 } else {
2321 rx_status->flag |= RX_FLAG_ICV_STRIPPED;
2322 /* TSC 0 */
2323 memcpy(skb->data + offset + 2, &pn48, 1);
2324 /* TSC 1 */
2325 memcpy(skb->data + offset, ((u8 *)&pn48) + 1, 1);
2326 /* TSC 2 , TSC 3 , TSC 4 , TSC 5*/
2327 memcpy(skb->data + offset + 4, ((u8 *)&pn48) + 2, 4);
2328 }
2329 }
2257 } 2330 }
2258 2331
2259 if (tkip_mic_type == HTT_RX_TKIP_MIC) 2332 if (tkip_mic_type == HTT_RX_TKIP_MIC)
@@ -2263,6 +2336,20 @@ static bool ath10k_htt_rx_proc_rx_ind_hl(struct ath10k_htt *htt,
2263 if (mpdu_ranges->mpdu_range_status == HTT_RX_IND_MPDU_STATUS_TKIP_MIC_ERR) 2336 if (mpdu_ranges->mpdu_range_status == HTT_RX_IND_MPDU_STATUS_TKIP_MIC_ERR)
2264 rx_status->flag |= RX_FLAG_MMIC_ERROR; 2337 rx_status->flag |= RX_FLAG_MMIC_ERROR;
2265 2338
2339 if (!qos && tid < IEEE80211_NUM_TIDS) {
2340 u8 offset;
2341 __le16 qos_ctrl = 0;
2342
2343 hdr = (struct ieee80211_hdr *)skb->data;
2344 offset = ieee80211_hdrlen(hdr->frame_control);
2345
2346 hdr->frame_control |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
2347 memmove(skb->data - IEEE80211_QOS_CTL_LEN, skb->data, offset);
2348 skb_push(skb, IEEE80211_QOS_CTL_LEN);
2349 qos_ctrl = cpu_to_le16(tid);
2350 memcpy(skb->data + offset, &qos_ctrl, IEEE80211_QOS_CTL_LEN);
2351 }
2352
2266 ieee80211_rx_ni(ar->hw, skb); 2353 ieee80211_rx_ni(ar->hw, skb);
2267 2354
2268 /* We have delivered the skb to the upper layers (mac80211) so we 2355 /* We have delivered the skb to the upper layers (mac80211) so we
diff --git a/drivers/net/wireless/ath/ath10k/htt_tx.c b/drivers/net/wireless/ath/ath10k/htt_tx.c
index 2ef717f18795..a182c0944cc7 100644
--- a/drivers/net/wireless/ath/ath10k/htt_tx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_tx.c
@@ -1237,6 +1237,7 @@ static int ath10k_htt_tx_hl(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txm
1237 struct ath10k *ar = htt->ar; 1237 struct ath10k *ar = htt->ar;
1238 int res, data_len; 1238 int res, data_len;
1239 struct htt_cmd_hdr *cmd_hdr; 1239 struct htt_cmd_hdr *cmd_hdr;
1240 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)msdu->data;
1240 struct htt_data_tx_desc *tx_desc; 1241 struct htt_data_tx_desc *tx_desc;
1241 struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(msdu); 1242 struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(msdu);
1242 struct sk_buff *tmp_skb; 1243 struct sk_buff *tmp_skb;
@@ -1247,6 +1248,13 @@ static int ath10k_htt_tx_hl(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txm
1247 u16 flags1 = 0; 1248 u16 flags1 = 0;
1248 u16 msdu_id = 0; 1249 u16 msdu_id = 0;
1249 1250
1251 if ((ieee80211_is_action(hdr->frame_control) ||
1252 ieee80211_is_deauth(hdr->frame_control) ||
1253 ieee80211_is_disassoc(hdr->frame_control)) &&
1254 ieee80211_has_protected(hdr->frame_control)) {
1255 skb_put(msdu, IEEE80211_CCMP_MIC_LEN);
1256 }
1257
1250 data_len = msdu->len; 1258 data_len = msdu->len;
1251 1259
1252 switch (txmode) { 1260 switch (txmode) {
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 12dad659bf68..a6d21856b7e7 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -5503,10 +5503,6 @@ static void ath10k_remove_interface(struct ieee80211_hw *hw,
5503 5503
5504 mutex_lock(&ar->conf_mutex); 5504 mutex_lock(&ar->conf_mutex);
5505 5505
5506 spin_lock_bh(&ar->data_lock);
5507 ath10k_mac_vif_beacon_cleanup(arvif);
5508 spin_unlock_bh(&ar->data_lock);
5509
5510 ret = ath10k_spectral_vif_stop(arvif); 5506 ret = ath10k_spectral_vif_stop(arvif);
5511 if (ret) 5507 if (ret)
5512 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n", 5508 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n",
@@ -5575,6 +5571,11 @@ static void ath10k_remove_interface(struct ieee80211_hw *hw,
5575 peer->vif = NULL; 5571 peer->vif = NULL;
5576 } 5572 }
5577 } 5573 }
5574
5575 /* Clean this up late, less opportunity for firmware to access
5576 * DMA memory we have deleted.
5577 */
5578 ath10k_mac_vif_beacon_cleanup(arvif);
5578 spin_unlock_bh(&ar->data_lock); 5579 spin_unlock_bh(&ar->data_lock);
5579 5580
5580 ath10k_peer_cleanup(ar, arvif->vdev_id); 5581 ath10k_peer_cleanup(ar, arvif->vdev_id);
diff --git a/drivers/net/wireless/ath/ath10k/sdio.c b/drivers/net/wireless/ath/ath10k/sdio.c
index 8ed4fbd8d6c3..9870d2d095c8 100644
--- a/drivers/net/wireless/ath/ath10k/sdio.c
+++ b/drivers/net/wireless/ath/ath10k/sdio.c
@@ -381,16 +381,11 @@ static int ath10k_sdio_mbox_rx_process_packet(struct ath10k *ar,
381 struct ath10k_htc_hdr *htc_hdr = (struct ath10k_htc_hdr *)skb->data; 381 struct ath10k_htc_hdr *htc_hdr = (struct ath10k_htc_hdr *)skb->data;
382 bool trailer_present = htc_hdr->flags & ATH10K_HTC_FLAG_TRAILER_PRESENT; 382 bool trailer_present = htc_hdr->flags & ATH10K_HTC_FLAG_TRAILER_PRESENT;
383 enum ath10k_htc_ep_id eid; 383 enum ath10k_htc_ep_id eid;
384 u16 payload_len;
385 u8 *trailer; 384 u8 *trailer;
386 int ret; 385 int ret;
387 386
388 payload_len = le16_to_cpu(htc_hdr->len);
389 skb->len = payload_len + sizeof(struct ath10k_htc_hdr);
390
391 if (trailer_present) { 387 if (trailer_present) {
392 trailer = skb->data + sizeof(*htc_hdr) + 388 trailer = skb->data + skb->len - htc_hdr->trailer_len;
393 payload_len - htc_hdr->trailer_len;
394 389
395 eid = pipe_id_to_eid(htc_hdr->eid); 390 eid = pipe_id_to_eid(htc_hdr->eid);
396 391
@@ -632,13 +627,31 @@ static int ath10k_sdio_mbox_rx_packet(struct ath10k *ar,
632{ 627{
633 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); 628 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar);
634 struct sk_buff *skb = pkt->skb; 629 struct sk_buff *skb = pkt->skb;
630 struct ath10k_htc_hdr *htc_hdr;
635 int ret; 631 int ret;
636 632
637 ret = ath10k_sdio_readsb(ar, ar_sdio->mbox_info.htc_addr, 633 ret = ath10k_sdio_readsb(ar, ar_sdio->mbox_info.htc_addr,
638 skb->data, pkt->alloc_len); 634 skb->data, pkt->alloc_len);
635 if (ret)
636 goto out;
637
638 /* Update actual length. The original length may be incorrect,
639 * as the FW will bundle multiple packets as long as their sizes
640 * fit within the same aligned length (pkt->alloc_len).
641 */
642 htc_hdr = (struct ath10k_htc_hdr *)skb->data;
643 pkt->act_len = le16_to_cpu(htc_hdr->len) + sizeof(*htc_hdr);
644 if (pkt->act_len > pkt->alloc_len) {
645 ath10k_warn(ar, "rx packet too large (%zu > %zu)\n",
646 pkt->act_len, pkt->alloc_len);
647 ret = -EMSGSIZE;
648 goto out;
649 }
650
651 skb_put(skb, pkt->act_len);
652
653out:
639 pkt->status = ret; 654 pkt->status = ret;
640 if (!ret)
641 skb_put(skb, pkt->act_len);
642 655
643 return ret; 656 return ret;
644} 657}
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index 2985bb17decd..4d5d10c01064 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -841,7 +841,7 @@ static int ath10k_wmi_tlv_op_pull_ch_info_ev(struct ath10k *ar,
841 struct wmi_ch_info_ev_arg *arg) 841 struct wmi_ch_info_ev_arg *arg)
842{ 842{
843 const void **tb; 843 const void **tb;
844 const struct wmi_chan_info_event *ev; 844 const struct wmi_tlv_chan_info_event *ev;
845 int ret; 845 int ret;
846 846
847 tb = ath10k_wmi_tlv_parse_alloc(ar, skb->data, skb->len, GFP_ATOMIC); 847 tb = ath10k_wmi_tlv_parse_alloc(ar, skb->data, skb->len, GFP_ATOMIC);
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.h b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
index d691f06e58f2..649b229a41e9 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
@@ -1615,6 +1615,22 @@ struct chan_info_params {
1615 1615
1616#define WMI_TLV_FLAG_MGMT_BUNDLE_TX_COMPL BIT(9) 1616#define WMI_TLV_FLAG_MGMT_BUNDLE_TX_COMPL BIT(9)
1617 1617
1618struct wmi_tlv_chan_info_event {
1619 __le32 err_code;
1620 __le32 freq;
1621 __le32 cmd_flags;
1622 __le32 noise_floor;
1623 __le32 rx_clear_count;
1624 __le32 cycle_count;
1625 __le32 chan_tx_pwr_range;
1626 __le32 chan_tx_pwr_tp;
1627 __le32 rx_frame_count;
1628 __le32 my_bss_rx_cycle_count;
1629 __le32 rx_11b_mode_data_duration;
1630 __le32 tx_frame_cnt;
1631 __le32 mac_clk_mhz;
1632} __packed;
1633
1618struct wmi_tlv_mgmt_tx_compl_ev { 1634struct wmi_tlv_mgmt_tx_compl_ev {
1619 __le32 desc_id; 1635 __le32 desc_id;
1620 __le32 status; 1636 __le32 status;
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 838768c98adc..e80dbe7e8f4c 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -6533,14 +6533,6 @@ struct wmi_chan_info_event {
6533 __le32 noise_floor; 6533 __le32 noise_floor;
6534 __le32 rx_clear_count; 6534 __le32 rx_clear_count;
6535 __le32 cycle_count; 6535 __le32 cycle_count;
6536 __le32 chan_tx_pwr_range;
6537 __le32 chan_tx_pwr_tp;
6538 __le32 rx_frame_count;
6539 __le32 my_bss_rx_cycle_count;
6540 __le32 rx_11b_mode_data_duration;
6541 __le32 tx_frame_cnt;
6542 __le32 mac_clk_mhz;
6543
6544} __packed; 6536} __packed;
6545 6537
6546struct wmi_10_4_chan_info_event { 6538struct wmi_10_4_chan_info_event {
diff --git a/drivers/net/wireless/ath/ath6kl/htc_mbox.c b/drivers/net/wireless/ath/ath6kl/htc_mbox.c
index 65c31da43c47..998947ef63b6 100644
--- a/drivers/net/wireless/ath/ath6kl/htc_mbox.c
+++ b/drivers/net/wireless/ath/ath6kl/htc_mbox.c
@@ -2855,8 +2855,8 @@ static void *ath6kl_htc_mbox_create(struct ath6kl *ar)
2855 target->dev = kzalloc(sizeof(*target->dev), GFP_KERNEL); 2855 target->dev = kzalloc(sizeof(*target->dev), GFP_KERNEL);
2856 if (!target->dev) { 2856 if (!target->dev) {
2857 ath6kl_err("unable to allocate memory\n"); 2857 ath6kl_err("unable to allocate memory\n");
2858 status = -ENOMEM; 2858 kfree(target);
2859 goto err_htc_cleanup; 2859 return NULL;
2860 } 2860 }
2861 2861
2862 spin_lock_init(&target->htc_lock); 2862 spin_lock_init(&target->htc_lock);
diff --git a/drivers/net/wireless/ath/ath6kl/usb.c b/drivers/net/wireless/ath/ath6kl/usb.c
index 4defb7a0330f..53b66e9434c9 100644
--- a/drivers/net/wireless/ath/ath6kl/usb.c
+++ b/drivers/net/wireless/ath/ath6kl/usb.c
@@ -132,6 +132,10 @@ ath6kl_usb_alloc_urb_from_pipe(struct ath6kl_usb_pipe *pipe)
132 struct ath6kl_urb_context *urb_context = NULL; 132 struct ath6kl_urb_context *urb_context = NULL;
133 unsigned long flags; 133 unsigned long flags;
134 134
135 /* bail if this pipe is not initialized */
136 if (!pipe->ar_usb)
137 return NULL;
138
135 spin_lock_irqsave(&pipe->ar_usb->cs_lock, flags); 139 spin_lock_irqsave(&pipe->ar_usb->cs_lock, flags);
136 if (!list_empty(&pipe->urb_list_head)) { 140 if (!list_empty(&pipe->urb_list_head)) {
137 urb_context = 141 urb_context =
@@ -150,6 +154,10 @@ static void ath6kl_usb_free_urb_to_pipe(struct ath6kl_usb_pipe *pipe,
150{ 154{
151 unsigned long flags; 155 unsigned long flags;
152 156
157 /* bail if this pipe is not initialized */
158 if (!pipe->ar_usb)
159 return;
160
153 spin_lock_irqsave(&pipe->ar_usb->cs_lock, flags); 161 spin_lock_irqsave(&pipe->ar_usb->cs_lock, flags);
154 pipe->urb_cnt++; 162 pipe->urb_cnt++;
155 163
diff --git a/drivers/net/wireless/ath/ath9k/Kconfig b/drivers/net/wireless/ath/ath9k/Kconfig
index 5601cfd6a293..2d1247f61297 100644
--- a/drivers/net/wireless/ath/ath9k/Kconfig
+++ b/drivers/net/wireless/ath/ath9k/Kconfig
@@ -157,6 +157,22 @@ config ATH9K_PCOEM
157 depends on ATH9K 157 depends on ATH9K
158 default y 158 default y
159 159
160config ATH9K_PCI_NO_EEPROM
161 tristate "Atheros ath9k pci loader for EEPROM-less chips"
162 depends on ATH9K_PCI
163 default n
164 help
165 This separate driver provides a loader in order to support the
166 AR500X to AR92XX-generation of ath9k PCI(e) WiFi chips, which have
167 their initialization data (which contains the real PCI Device ID
168 that ath9k will need) stored together with the calibration data out
169 of reach for the ath9k chip.
170
171 These devices are usually various network appliances, routers or
172 access Points and such.
173
174 If unsure say N.
175
160config ATH9K_HTC 176config ATH9K_HTC
161 tristate "Atheros HTC based wireless cards support" 177 tristate "Atheros HTC based wireless cards support"
162 depends on USB && MAC80211 178 depends on USB && MAC80211
diff --git a/drivers/net/wireless/ath/ath9k/Makefile b/drivers/net/wireless/ath/ath9k/Makefile
index 15af0a836925..eff94bcd1f0a 100644
--- a/drivers/net/wireless/ath/ath9k/Makefile
+++ b/drivers/net/wireless/ath/ath9k/Makefile
@@ -77,3 +77,5 @@ ath9k_htc-y += htc_hst.o \
77ath9k_htc-$(CONFIG_ATH9K_HTC_DEBUGFS) += htc_drv_debug.o 77ath9k_htc-$(CONFIG_ATH9K_HTC_DEBUGFS) += htc_drv_debug.o
78 78
79obj-$(CONFIG_ATH9K_HTC) += ath9k_htc.o 79obj-$(CONFIG_ATH9K_HTC) += ath9k_htc.o
80
81obj-$(CONFIG_ATH9K_PCI_NO_EEPROM) += ath9k_pci_owl_loader.o
diff --git a/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c b/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c
new file mode 100644
index 000000000000..159490f5a111
--- /dev/null
+++ b/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c
@@ -0,0 +1,215 @@
1// SPDX-License-Identifier: ISC
2/* Initialize Owl Emulation Devices
3 *
4 * Copyright (C) 2016 Christian Lamparter <chunkeey@gmail.com>
5 * Copyright (C) 2016 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
6 *
7 * Some devices (like the Cisco Meraki Z1 Cloud Managed Teleworker Gateway)
8 * need to be able to initialize the PCIe wifi device. Normally, this is done
9 * during the early stages as a pci quirk.
10 * However, this isn't possible for devices which have the init code for the
11 * Atheros chip stored on UBI Volume on NAND. Hence, this module can be used to
12 * initialize the chip when the user-space is ready to extract the init code.
13 */
14#include <linux/module.h>
15#include <linux/version.h>
16#include <linux/completion.h>
17#include <linux/etherdevice.h>
18#include <linux/firmware.h>
19#include <linux/pci.h>
20#include <linux/delay.h>
21#include <linux/platform_device.h>
22#include <linux/ath9k_platform.h>
23
24struct owl_ctx {
25 struct completion eeprom_load;
26};
27
28#define EEPROM_FILENAME_LEN 100
29
30#define AR5416_EEPROM_MAGIC 0xa55a
31
32static int ath9k_pci_fixup(struct pci_dev *pdev, const u16 *cal_data,
33 size_t cal_len)
34{
35 void __iomem *mem;
36 const void *cal_end = (void *)cal_data + cal_len;
37 const struct {
38 u16 reg;
39 u16 low_val;
40 u16 high_val;
41 } __packed * data;
42 u16 cmd;
43 u32 bar0;
44 bool swap_needed = false;
45
46 if (*cal_data != AR5416_EEPROM_MAGIC) {
47 if (*cal_data != swab16(AR5416_EEPROM_MAGIC)) {
48 dev_err(&pdev->dev, "invalid calibration data\n");
49 return -EINVAL;
50 }
51
52 dev_dbg(&pdev->dev, "calibration data needs swapping\n");
53 swap_needed = true;
54 }
55
56 dev_info(&pdev->dev, "fixup device configuration\n");
57
58 mem = pcim_iomap(pdev, 0, 0);
59 if (!mem) {
60 dev_err(&pdev->dev, "ioremap error\n");
61 return -EINVAL;
62 }
63
64 pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &bar0);
65 pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0,
66 pci_resource_start(pdev, 0));
67 pci_read_config_word(pdev, PCI_COMMAND, &cmd);
68 cmd |= PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
69 pci_write_config_word(pdev, PCI_COMMAND, cmd);
70
71 /* set pointer to first reg address */
72 for (data = (const void *)(cal_data + 3);
73 (const void *)data <= cal_end && data->reg != (u16)~0;
74 data++) {
75 u32 val;
76 u16 reg;
77
78 reg = data->reg;
79 val = data->low_val;
80 val |= ((u32)data->high_val) << 16;
81
82 if (swap_needed) {
83 reg = swab16(reg);
84 val = swahb32(val);
85 }
86
87 __raw_writel(val, mem + reg);
88 usleep_range(100, 120);
89 }
90
91 pci_read_config_word(pdev, PCI_COMMAND, &cmd);
92 cmd &= ~(PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY);
93 pci_write_config_word(pdev, PCI_COMMAND, cmd);
94
95 pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0, bar0);
96 pcim_iounmap(pdev, mem);
97
98 pci_disable_device(pdev);
99
100 return 0;
101}
102
103static void owl_fw_cb(const struct firmware *fw, void *context)
104{
105 struct pci_dev *pdev = (struct pci_dev *)context;
106 struct owl_ctx *ctx = (struct owl_ctx *)pci_get_drvdata(pdev);
107 struct pci_bus *bus;
108
109 complete(&ctx->eeprom_load);
110
111 if (!fw) {
112 dev_err(&pdev->dev, "no eeprom data received.\n");
113 goto release;
114 }
115
116 /* also note that we are doing *u16 operations on the file */
117 if (fw->size > 4096 || fw->size < 0x200 || (fw->size & 1) == 1) {
118 dev_err(&pdev->dev, "eeprom file has an invalid size.\n");
119 goto release;
120 }
121
122 if (ath9k_pci_fixup(pdev, (const u16 *)fw->data, fw->size))
123 goto release;
124
125 pci_lock_rescan_remove();
126 bus = pdev->bus;
127 pci_stop_and_remove_bus_device(pdev);
128 /* the device should come back with the proper
129 * ProductId. But we have to initiate a rescan.
130 */
131 pci_rescan_bus(bus);
132 pci_unlock_rescan_remove();
133
134release:
135 release_firmware(fw);
136}
137
138static const char *owl_get_eeprom_name(struct pci_dev *pdev)
139{
140 struct device *dev = &pdev->dev;
141 char *eeprom_name;
142
143 dev_dbg(dev, "using auto-generated eeprom filename\n");
144
145 eeprom_name = devm_kzalloc(dev, EEPROM_FILENAME_LEN, GFP_KERNEL);
146 if (!eeprom_name)
147 return NULL;
148
149 /* this should match the pattern used in ath9k/init.c */
150 scnprintf(eeprom_name, EEPROM_FILENAME_LEN, "ath9k-eeprom-pci-%s.bin",
151 dev_name(dev));
152
153 return eeprom_name;
154}
155
156static int owl_probe(struct pci_dev *pdev,
157 const struct pci_device_id *id)
158{
159 struct owl_ctx *ctx;
160 const char *eeprom_name;
161 int err = 0;
162
163 if (pcim_enable_device(pdev))
164 return -EIO;
165
166 pcim_pin_device(pdev);
167
168 eeprom_name = owl_get_eeprom_name(pdev);
169 if (!eeprom_name) {
170 dev_err(&pdev->dev, "no eeprom filename found.\n");
171 return -ENODEV;
172 }
173
174 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
175 if (!ctx)
176 return -ENOMEM;
177
178 init_completion(&ctx->eeprom_load);
179
180 pci_set_drvdata(pdev, ctx);
181 err = request_firmware_nowait(THIS_MODULE, true, eeprom_name,
182 &pdev->dev, GFP_KERNEL, pdev, owl_fw_cb);
183 if (err)
184 dev_err(&pdev->dev, "failed to request caldata (%d).\n", err);
185
186 return err;
187}
188
189static void owl_remove(struct pci_dev *pdev)
190{
191 struct owl_ctx *ctx = pci_get_drvdata(pdev);
192
193 if (ctx) {
194 wait_for_completion(&ctx->eeprom_load);
195 pci_set_drvdata(pdev, NULL);
196 }
197}
198
199static const struct pci_device_id owl_pci_table[] = {
200 { PCI_VDEVICE(ATHEROS, 0xff1c) }, /* PCIe */
201 { PCI_VDEVICE(ATHEROS, 0xff1d) }, /* PCI */
202 { },
203};
204MODULE_DEVICE_TABLE(pci, owl_pci_table);
205
206static struct pci_driver owl_driver = {
207 .name = KBUILD_MODNAME,
208 .id_table = owl_pci_table,
209 .probe = owl_probe,
210 .remove = owl_remove,
211};
212module_pci_driver(owl_driver);
213MODULE_AUTHOR("Christian Lamparter <chunkeey@gmail.com>");
214MODULE_DESCRIPTION("External EEPROM data loader for Atheros AR500X to AR92XX");
215MODULE_LICENSE("Dual BSD/GPL");
diff --git a/drivers/net/wireless/ath/ath9k/dynack.c b/drivers/net/wireless/ath/ath9k/dynack.c
index f112fa5b2eac..fbeb4a739d32 100644
--- a/drivers/net/wireless/ath/ath9k/dynack.c
+++ b/drivers/net/wireless/ath/ath9k/dynack.c
@@ -20,12 +20,31 @@
20 20
21#define COMPUTE_TO (5 * HZ) 21#define COMPUTE_TO (5 * HZ)
22#define LATEACK_DELAY (10 * HZ) 22#define LATEACK_DELAY (10 * HZ)
23#define LATEACK_TO 256
24#define MAX_DELAY 300
25#define EWMA_LEVEL 96 23#define EWMA_LEVEL 96
26#define EWMA_DIV 128 24#define EWMA_DIV 128
27 25
28/** 26/**
27 * ath_dynack_get_max_to - set max timeout according to channel width
28 * @ah: ath hw
29 *
30 */
31static u32 ath_dynack_get_max_to(struct ath_hw *ah)
32{
33 const struct ath9k_channel *chan = ah->curchan;
34
35 if (!chan)
36 return 300;
37
38 if (IS_CHAN_HT40(chan))
39 return 300;
40 if (IS_CHAN_HALF_RATE(chan))
41 return 750;
42 if (IS_CHAN_QUARTER_RATE(chan))
43 return 1500;
44 return 600;
45}
46
47/**
29 * ath_dynack_ewma - EWMA (Exponentially Weighted Moving Average) calculation 48 * ath_dynack_ewma - EWMA (Exponentially Weighted Moving Average) calculation
30 * 49 *
31 */ 50 */
@@ -79,6 +98,24 @@ static inline bool ath_dynack_bssidmask(struct ath_hw *ah, const u8 *mac)
79} 98}
80 99
81/** 100/**
101 * ath_dynack_set_timeout - configure timeouts/slottime registers
102 * @ah: ath hw
103 * @to: timeout value
104 *
105 */
106static void ath_dynack_set_timeout(struct ath_hw *ah, int to)
107{
108 struct ath_common *common = ath9k_hw_common(ah);
109 int slottime = (to - 3) / 2;
110
111 ath_dbg(common, DYNACK, "ACK timeout %u slottime %u\n",
112 to, slottime);
113 ath9k_hw_setslottime(ah, slottime);
114 ath9k_hw_set_ack_timeout(ah, to);
115 ath9k_hw_set_cts_timeout(ah, to);
116}
117
118/**
82 * ath_dynack_compute_ackto - compute ACK timeout as the maximum STA timeout 119 * ath_dynack_compute_ackto - compute ACK timeout as the maximum STA timeout
83 * @ah: ath hw 120 * @ah: ath hw
84 * 121 *
@@ -86,7 +123,6 @@ static inline bool ath_dynack_bssidmask(struct ath_hw *ah, const u8 *mac)
86 */ 123 */
87static void ath_dynack_compute_ackto(struct ath_hw *ah) 124static void ath_dynack_compute_ackto(struct ath_hw *ah)
88{ 125{
89 struct ath_common *common = ath9k_hw_common(ah);
90 struct ath_dynack *da = &ah->dynack; 126 struct ath_dynack *da = &ah->dynack;
91 struct ath_node *an; 127 struct ath_node *an;
92 int to = 0; 128 int to = 0;
@@ -96,15 +132,8 @@ static void ath_dynack_compute_ackto(struct ath_hw *ah)
96 to = an->ackto; 132 to = an->ackto;
97 133
98 if (to && da->ackto != to) { 134 if (to && da->ackto != to) {
99 u32 slottime; 135 ath_dynack_set_timeout(ah, to);
100
101 slottime = (to - 3) / 2;
102 da->ackto = to; 136 da->ackto = to;
103 ath_dbg(common, DYNACK, "ACK timeout %u slottime %u\n",
104 da->ackto, slottime);
105 ath9k_hw_setslottime(ah, slottime);
106 ath9k_hw_set_ack_timeout(ah, da->ackto);
107 ath9k_hw_set_cts_timeout(ah, da->ackto);
108 } 137 }
109} 138}
110 139
@@ -116,15 +145,16 @@ static void ath_dynack_compute_ackto(struct ath_hw *ah)
116 */ 145 */
117static void ath_dynack_compute_to(struct ath_hw *ah) 146static void ath_dynack_compute_to(struct ath_hw *ah)
118{ 147{
119 u32 ackto, ack_ts; 148 struct ath_dynack *da = &ah->dynack;
120 u8 *dst, *src; 149 u32 ackto, ack_ts, max_to;
121 struct ieee80211_sta *sta; 150 struct ieee80211_sta *sta;
122 struct ath_node *an;
123 struct ts_info *st_ts; 151 struct ts_info *st_ts;
124 struct ath_dynack *da = &ah->dynack; 152 struct ath_node *an;
153 u8 *dst, *src;
125 154
126 rcu_read_lock(); 155 rcu_read_lock();
127 156
157 max_to = ath_dynack_get_max_to(ah);
128 while (da->st_rbf.h_rb != da->st_rbf.t_rb && 158 while (da->st_rbf.h_rb != da->st_rbf.t_rb &&
129 da->ack_rbf.h_rb != da->ack_rbf.t_rb) { 159 da->ack_rbf.h_rb != da->ack_rbf.t_rb) {
130 ack_ts = da->ack_rbf.tstamp[da->ack_rbf.h_rb]; 160 ack_ts = da->ack_rbf.tstamp[da->ack_rbf.h_rb];
@@ -140,7 +170,7 @@ static void ath_dynack_compute_to(struct ath_hw *ah)
140 if (ack_ts > st_ts->tstamp + st_ts->dur) { 170 if (ack_ts > st_ts->tstamp + st_ts->dur) {
141 ackto = ack_ts - st_ts->tstamp - st_ts->dur; 171 ackto = ack_ts - st_ts->tstamp - st_ts->dur;
142 172
143 if (ackto < MAX_DELAY) { 173 if (ackto < max_to) {
144 sta = ieee80211_find_sta_by_ifaddr(ah->hw, dst, 174 sta = ieee80211_find_sta_by_ifaddr(ah->hw, dst,
145 src); 175 src);
146 if (sta) { 176 if (sta) {
@@ -197,11 +227,10 @@ void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb,
197 if (ieee80211_is_assoc_req(hdr->frame_control) || 227 if (ieee80211_is_assoc_req(hdr->frame_control) ||
198 ieee80211_is_assoc_resp(hdr->frame_control) || 228 ieee80211_is_assoc_resp(hdr->frame_control) ||
199 ieee80211_is_auth(hdr->frame_control)) { 229 ieee80211_is_auth(hdr->frame_control)) {
200 ath_dbg(common, DYNACK, "late ack\n"); 230 u32 max_to = ath_dynack_get_max_to(ah);
201 231
202 ath9k_hw_setslottime(ah, (LATEACK_TO - 3) / 2); 232 ath_dbg(common, DYNACK, "late ack\n");
203 ath9k_hw_set_ack_timeout(ah, LATEACK_TO); 233 ath_dynack_set_timeout(ah, max_to);
204 ath9k_hw_set_cts_timeout(ah, LATEACK_TO);
205 if (sta) { 234 if (sta) {
206 struct ath_node *an; 235 struct ath_node *an;
207 236
@@ -292,15 +321,13 @@ EXPORT_SYMBOL(ath_dynack_sample_ack_ts);
292 */ 321 */
293void ath_dynack_node_init(struct ath_hw *ah, struct ath_node *an) 322void ath_dynack_node_init(struct ath_hw *ah, struct ath_node *an)
294{ 323{
295 /* ackto = slottime + sifs + air delay */
296 u32 ackto = 9 + 16 + 64;
297 struct ath_dynack *da = &ah->dynack; 324 struct ath_dynack *da = &ah->dynack;
298 325
299 an->ackto = ackto; 326 an->ackto = da->ackto;
300 327
301 spin_lock(&da->qlock); 328 spin_lock_bh(&da->qlock);
302 list_add_tail(&an->list, &da->nodes); 329 list_add_tail(&an->list, &da->nodes);
303 spin_unlock(&da->qlock); 330 spin_unlock_bh(&da->qlock);
304} 331}
305EXPORT_SYMBOL(ath_dynack_node_init); 332EXPORT_SYMBOL(ath_dynack_node_init);
306 333
@@ -314,9 +341,9 @@ void ath_dynack_node_deinit(struct ath_hw *ah, struct ath_node *an)
314{ 341{
315 struct ath_dynack *da = &ah->dynack; 342 struct ath_dynack *da = &ah->dynack;
316 343
317 spin_lock(&da->qlock); 344 spin_lock_bh(&da->qlock);
318 list_del(&an->list); 345 list_del(&an->list);
319 spin_unlock(&da->qlock); 346 spin_unlock_bh(&da->qlock);
320} 347}
321EXPORT_SYMBOL(ath_dynack_node_deinit); 348EXPORT_SYMBOL(ath_dynack_node_deinit);
322 349
@@ -327,22 +354,26 @@ EXPORT_SYMBOL(ath_dynack_node_deinit);
327 */ 354 */
328void ath_dynack_reset(struct ath_hw *ah) 355void ath_dynack_reset(struct ath_hw *ah)
329{ 356{
330 /* ackto = slottime + sifs + air delay */
331 u32 ackto = 9 + 16 + 64;
332 struct ath_dynack *da = &ah->dynack; 357 struct ath_dynack *da = &ah->dynack;
358 struct ath_node *an;
359
360 spin_lock_bh(&da->qlock);
333 361
334 da->lto = jiffies; 362 da->lto = jiffies + COMPUTE_TO;
335 da->ackto = ackto;
336 363
337 da->st_rbf.t_rb = 0; 364 da->st_rbf.t_rb = 0;
338 da->st_rbf.h_rb = 0; 365 da->st_rbf.h_rb = 0;
339 da->ack_rbf.t_rb = 0; 366 da->ack_rbf.t_rb = 0;
340 da->ack_rbf.h_rb = 0; 367 da->ack_rbf.h_rb = 0;
341 368
369 da->ackto = ath_dynack_get_max_to(ah);
370 list_for_each_entry(an, &da->nodes, list)
371 an->ackto = da->ackto;
372
342 /* init acktimeout */ 373 /* init acktimeout */
343 ath9k_hw_setslottime(ah, (ackto - 3) / 2); 374 ath_dynack_set_timeout(ah, da->ackto);
344 ath9k_hw_set_ack_timeout(ah, ackto); 375
345 ath9k_hw_set_cts_timeout(ah, ackto); 376 spin_unlock_bh(&da->qlock);
346} 377}
347EXPORT_SYMBOL(ath_dynack_reset); 378EXPORT_SYMBOL(ath_dynack_reset);
348 379
@@ -359,6 +390,8 @@ void ath_dynack_init(struct ath_hw *ah)
359 390
360 spin_lock_init(&da->qlock); 391 spin_lock_init(&da->qlock);
361 INIT_LIST_HEAD(&da->nodes); 392 INIT_LIST_HEAD(&da->nodes);
393 /* ackto = slottime + sifs + air delay */
394 da->ackto = 9 + 16 + 64;
362 395
363 ah->hw->wiphy->features |= NL80211_FEATURE_ACKTO_ESTIMATION; 396 ah->hw->wiphy->features |= NL80211_FEATURE_ACKTO_ESTIMATION;
364} 397}
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index 214c68269a69..d961095ab01f 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -463,7 +463,7 @@ static void ath9k_enable_rmw_buffer(void *hw_priv)
463 atomic_inc(&priv->wmi->m_rmw_cnt); 463 atomic_inc(&priv->wmi->m_rmw_cnt);
464} 464}
465 465
466static u32 ath9k_reg_rmw_single(void *hw_priv, 466static void ath9k_reg_rmw_single(void *hw_priv,
467 u32 reg_offset, u32 set, u32 clr) 467 u32 reg_offset, u32 set, u32 clr)
468{ 468{
469 struct ath_hw *ah = hw_priv; 469 struct ath_hw *ah = hw_priv;
@@ -471,7 +471,6 @@ static u32 ath9k_reg_rmw_single(void *hw_priv,
471 struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv; 471 struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
472 struct register_rmw buf, buf_ret; 472 struct register_rmw buf, buf_ret;
473 int ret; 473 int ret;
474 u32 val = 0;
475 474
476 buf.reg = cpu_to_be32(reg_offset); 475 buf.reg = cpu_to_be32(reg_offset);
477 buf.set = cpu_to_be32(set); 476 buf.set = cpu_to_be32(set);
@@ -485,7 +484,6 @@ static u32 ath9k_reg_rmw_single(void *hw_priv,
485 ath_dbg(common, WMI, "REGISTER RMW FAILED:(0x%04x, %d)\n", 484 ath_dbg(common, WMI, "REGISTER RMW FAILED:(0x%04x, %d)\n",
486 reg_offset, ret); 485 reg_offset, ret);
487 } 486 }
488 return val;
489} 487}
490 488
491static u32 ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr) 489static u32 ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
index 1bf63a4efb4c..d091c8ebdcf0 100644
--- a/drivers/net/wireless/ath/ath9k/htc_hst.c
+++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
@@ -170,6 +170,7 @@ static int htc_config_pipe_credits(struct htc_target *target)
170 time_left = wait_for_completion_timeout(&target->cmd_wait, HZ); 170 time_left = wait_for_completion_timeout(&target->cmd_wait, HZ);
171 if (!time_left) { 171 if (!time_left) {
172 dev_err(target->dev, "HTC credit config timeout\n"); 172 dev_err(target->dev, "HTC credit config timeout\n");
173 kfree_skb(skb);
173 return -ETIMEDOUT; 174 return -ETIMEDOUT;
174 } 175 }
175 176
@@ -205,6 +206,7 @@ static int htc_setup_complete(struct htc_target *target)
205 time_left = wait_for_completion_timeout(&target->cmd_wait, HZ); 206 time_left = wait_for_completion_timeout(&target->cmd_wait, HZ);
206 if (!time_left) { 207 if (!time_left) {
207 dev_err(target->dev, "HTC start timeout\n"); 208 dev_err(target->dev, "HTC start timeout\n");
209 kfree_skb(skb);
208 return -ETIMEDOUT; 210 return -ETIMEDOUT;
209 } 211 }
210 212
@@ -277,6 +279,7 @@ int htc_connect_service(struct htc_target *target,
277 if (!time_left) { 279 if (!time_left) {
278 dev_err(target->dev, "Service connection timeout for: %d\n", 280 dev_err(target->dev, "Service connection timeout for: %d\n",
279 service_connreq->service_id); 281 service_connreq->service_id);
282 kfree_skb(skb);
280 return -ETIMEDOUT; 283 return -ETIMEDOUT;
281 } 284 }
282 285
diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
index d1f6710ca63b..cdc146091194 100644
--- a/drivers/net/wireless/ath/ath9k/wmi.c
+++ b/drivers/net/wireless/ath/ath9k/wmi.c
@@ -336,6 +336,7 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
336 ath_dbg(common, WMI, "Timeout waiting for WMI command: %s\n", 336 ath_dbg(common, WMI, "Timeout waiting for WMI command: %s\n",
337 wmi_cmd_to_name(cmd_id)); 337 wmi_cmd_to_name(cmd_id));
338 mutex_unlock(&wmi->op_mutex); 338 mutex_unlock(&wmi->op_mutex);
339 kfree_skb(skb);
339 return -ETIMEDOUT; 340 return -ETIMEDOUT;
340 } 341 }
341 342
diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c
index 99f1897a775d..486957a04bd1 100644
--- a/drivers/net/wireless/ath/carl9170/usb.c
+++ b/drivers/net/wireless/ath/carl9170/usb.c
@@ -1107,12 +1107,10 @@ static int carl9170_usb_probe(struct usb_interface *intf,
1107static void carl9170_usb_disconnect(struct usb_interface *intf) 1107static void carl9170_usb_disconnect(struct usb_interface *intf)
1108{ 1108{
1109 struct ar9170 *ar = usb_get_intfdata(intf); 1109 struct ar9170 *ar = usb_get_intfdata(intf);
1110 struct usb_device *udev;
1111 1110
1112 if (WARN_ON(!ar)) 1111 if (WARN_ON(!ar))
1113 return; 1112 return;
1114 1113
1115 udev = ar->udev;
1116 wait_for_completion(&ar->fw_load_wait); 1114 wait_for_completion(&ar->fw_load_wait);
1117 1115
1118 if (IS_INITIALIZED(ar)) { 1116 if (IS_INITIALIZED(ar)) {
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index 1d2d698fb779..523550f94a3f 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -641,52 +641,58 @@ int wcn36xx_smd_start_hw_scan(struct wcn36xx *wcn, struct ieee80211_vif *vif,
641 struct cfg80211_scan_request *req) 641 struct cfg80211_scan_request *req)
642{ 642{
643 struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif); 643 struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
644 struct wcn36xx_hal_start_scan_offload_req_msg msg_body; 644 struct wcn36xx_hal_start_scan_offload_req_msg *msg_body;
645 int ret, i; 645 int ret, i;
646 646
647 if (req->ie_len > WCN36XX_MAX_SCAN_IE_LEN) 647 if (req->ie_len > WCN36XX_MAX_SCAN_IE_LEN)
648 return -EINVAL; 648 return -EINVAL;
649 649
650 mutex_lock(&wcn->hal_mutex); 650 mutex_lock(&wcn->hal_mutex);
651 INIT_HAL_MSG(msg_body, WCN36XX_HAL_START_SCAN_OFFLOAD_REQ); 651 msg_body = kzalloc(sizeof(*msg_body), GFP_KERNEL);
652 if (!msg_body) {
653 ret = -ENOMEM;
654 goto out;
655 }
652 656
653 msg_body.scan_type = WCN36XX_HAL_SCAN_TYPE_ACTIVE; 657 INIT_HAL_MSG((*msg_body), WCN36XX_HAL_START_SCAN_OFFLOAD_REQ);
654 msg_body.min_ch_time = 30;
655 msg_body.max_ch_time = 100;
656 msg_body.scan_hidden = 1;
657 memcpy(msg_body.mac, vif->addr, ETH_ALEN);
658 msg_body.bss_type = vif_priv->bss_type;
659 msg_body.p2p_search = vif->p2p;
660 658
661 msg_body.num_ssid = min_t(u8, req->n_ssids, ARRAY_SIZE(msg_body.ssids)); 659 msg_body->scan_type = WCN36XX_HAL_SCAN_TYPE_ACTIVE;
662 for (i = 0; i < msg_body.num_ssid; i++) { 660 msg_body->min_ch_time = 30;
663 msg_body.ssids[i].length = min_t(u8, req->ssids[i].ssid_len, 661 msg_body->max_ch_time = 100;
664 sizeof(msg_body.ssids[i].ssid)); 662 msg_body->scan_hidden = 1;
665 memcpy(msg_body.ssids[i].ssid, req->ssids[i].ssid, 663 memcpy(msg_body->mac, vif->addr, ETH_ALEN);
666 msg_body.ssids[i].length); 664 msg_body->bss_type = vif_priv->bss_type;
665 msg_body->p2p_search = vif->p2p;
666
667 msg_body->num_ssid = min_t(u8, req->n_ssids, ARRAY_SIZE(msg_body->ssids));
668 for (i = 0; i < msg_body->num_ssid; i++) {
669 msg_body->ssids[i].length = min_t(u8, req->ssids[i].ssid_len,
670 sizeof(msg_body->ssids[i].ssid));
671 memcpy(msg_body->ssids[i].ssid, req->ssids[i].ssid,
672 msg_body->ssids[i].length);
667 } 673 }
668 674
669 msg_body.num_channel = min_t(u8, req->n_channels, 675 msg_body->num_channel = min_t(u8, req->n_channels,
670 sizeof(msg_body.channels)); 676 sizeof(msg_body->channels));
671 for (i = 0; i < msg_body.num_channel; i++) 677 for (i = 0; i < msg_body->num_channel; i++)
672 msg_body.channels[i] = req->channels[i]->hw_value; 678 msg_body->channels[i] = req->channels[i]->hw_value;
673 679
674 msg_body.header.len -= WCN36XX_MAX_SCAN_IE_LEN; 680 msg_body->header.len -= WCN36XX_MAX_SCAN_IE_LEN;
675 681
676 if (req->ie_len > 0) { 682 if (req->ie_len > 0) {
677 msg_body.ie_len = req->ie_len; 683 msg_body->ie_len = req->ie_len;
678 msg_body.header.len += req->ie_len; 684 msg_body->header.len += req->ie_len;
679 memcpy(msg_body.ie, req->ie, req->ie_len); 685 memcpy(msg_body->ie, req->ie, req->ie_len);
680 } 686 }
681 687
682 PREPARE_HAL_BUF(wcn->hal_buf, msg_body); 688 PREPARE_HAL_BUF(wcn->hal_buf, (*msg_body));
683 689
684 wcn36xx_dbg(WCN36XX_DBG_HAL, 690 wcn36xx_dbg(WCN36XX_DBG_HAL,
685 "hal start hw-scan (channels: %u; ssids: %u; p2p: %s)\n", 691 "hal start hw-scan (channels: %u; ssids: %u; p2p: %s)\n",
686 msg_body.num_channel, msg_body.num_ssid, 692 msg_body->num_channel, msg_body->num_ssid,
687 msg_body.p2p_search ? "yes" : "no"); 693 msg_body->p2p_search ? "yes" : "no");
688 694
689 ret = wcn36xx_smd_send_and_wait(wcn, msg_body.header.len); 695 ret = wcn36xx_smd_send_and_wait(wcn, msg_body->header.len);
690 if (ret) { 696 if (ret) {
691 wcn36xx_err("Sending hal_start_scan_offload failed\n"); 697 wcn36xx_err("Sending hal_start_scan_offload failed\n");
692 goto out; 698 goto out;
@@ -698,6 +704,7 @@ int wcn36xx_smd_start_hw_scan(struct wcn36xx *wcn, struct ieee80211_vif *vif,
698 goto out; 704 goto out;
699 } 705 }
700out: 706out:
707 kfree(msg_body);
701 mutex_unlock(&wcn->hal_mutex); 708 mutex_unlock(&wcn->hal_mutex);
702 return ret; 709 return ret;
703} 710}
@@ -1257,96 +1264,104 @@ out:
1257static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn, 1264static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn,
1258 const struct wcn36xx_hal_config_bss_req_msg *orig) 1265 const struct wcn36xx_hal_config_bss_req_msg *orig)
1259{ 1266{
1260 struct wcn36xx_hal_config_bss_req_msg_v1 msg_body; 1267 struct wcn36xx_hal_config_bss_req_msg_v1 *msg_body;
1261 struct wcn36xx_hal_config_bss_params_v1 *bss = &msg_body.bss_params; 1268 struct wcn36xx_hal_config_bss_params_v1 *bss;
1262 struct wcn36xx_hal_config_sta_params_v1 *sta = &bss->sta; 1269 struct wcn36xx_hal_config_sta_params_v1 *sta;
1270 int ret;
1271
1272 msg_body = kzalloc(sizeof(*msg_body), GFP_KERNEL);
1273 if (!msg_body)
1274 return -ENOMEM;
1275
1276 INIT_HAL_MSG((*msg_body), WCN36XX_HAL_CONFIG_BSS_REQ);
1263 1277
1264 INIT_HAL_MSG(msg_body, WCN36XX_HAL_CONFIG_BSS_REQ); 1278 bss = &msg_body->bss_params;
1279 sta = &bss->sta;
1265 1280
1266 /* convert orig to v1 */ 1281 /* convert orig to v1 */
1267 memcpy(&msg_body.bss_params.bssid, 1282 memcpy(&msg_body->bss_params.bssid,
1268 &orig->bss_params.bssid, ETH_ALEN); 1283 &orig->bss_params.bssid, ETH_ALEN);
1269 memcpy(&msg_body.bss_params.self_mac_addr, 1284 memcpy(&msg_body->bss_params.self_mac_addr,
1270 &orig->bss_params.self_mac_addr, ETH_ALEN); 1285 &orig->bss_params.self_mac_addr, ETH_ALEN);
1271 1286
1272 msg_body.bss_params.bss_type = orig->bss_params.bss_type; 1287 msg_body->bss_params.bss_type = orig->bss_params.bss_type;
1273 msg_body.bss_params.oper_mode = orig->bss_params.oper_mode; 1288 msg_body->bss_params.oper_mode = orig->bss_params.oper_mode;
1274 msg_body.bss_params.nw_type = orig->bss_params.nw_type; 1289 msg_body->bss_params.nw_type = orig->bss_params.nw_type;
1275 1290
1276 msg_body.bss_params.short_slot_time_supported = 1291 msg_body->bss_params.short_slot_time_supported =
1277 orig->bss_params.short_slot_time_supported; 1292 orig->bss_params.short_slot_time_supported;
1278 msg_body.bss_params.lla_coexist = orig->bss_params.lla_coexist; 1293 msg_body->bss_params.lla_coexist = orig->bss_params.lla_coexist;
1279 msg_body.bss_params.llb_coexist = orig->bss_params.llb_coexist; 1294 msg_body->bss_params.llb_coexist = orig->bss_params.llb_coexist;
1280 msg_body.bss_params.llg_coexist = orig->bss_params.llg_coexist; 1295 msg_body->bss_params.llg_coexist = orig->bss_params.llg_coexist;
1281 msg_body.bss_params.ht20_coexist = orig->bss_params.ht20_coexist; 1296 msg_body->bss_params.ht20_coexist = orig->bss_params.ht20_coexist;
1282 msg_body.bss_params.lln_non_gf_coexist = 1297 msg_body->bss_params.lln_non_gf_coexist =
1283 orig->bss_params.lln_non_gf_coexist; 1298 orig->bss_params.lln_non_gf_coexist;
1284 1299
1285 msg_body.bss_params.lsig_tx_op_protection_full_support = 1300 msg_body->bss_params.lsig_tx_op_protection_full_support =
1286 orig->bss_params.lsig_tx_op_protection_full_support; 1301 orig->bss_params.lsig_tx_op_protection_full_support;
1287 msg_body.bss_params.rifs_mode = orig->bss_params.rifs_mode; 1302 msg_body->bss_params.rifs_mode = orig->bss_params.rifs_mode;
1288 msg_body.bss_params.beacon_interval = orig->bss_params.beacon_interval; 1303 msg_body->bss_params.beacon_interval = orig->bss_params.beacon_interval;
1289 msg_body.bss_params.dtim_period = orig->bss_params.dtim_period; 1304 msg_body->bss_params.dtim_period = orig->bss_params.dtim_period;
1290 msg_body.bss_params.tx_channel_width_set = 1305 msg_body->bss_params.tx_channel_width_set =
1291 orig->bss_params.tx_channel_width_set; 1306 orig->bss_params.tx_channel_width_set;
1292 msg_body.bss_params.oper_channel = orig->bss_params.oper_channel; 1307 msg_body->bss_params.oper_channel = orig->bss_params.oper_channel;
1293 msg_body.bss_params.ext_channel = orig->bss_params.ext_channel; 1308 msg_body->bss_params.ext_channel = orig->bss_params.ext_channel;
1294 1309
1295 msg_body.bss_params.reserved = orig->bss_params.reserved; 1310 msg_body->bss_params.reserved = orig->bss_params.reserved;
1296 1311
1297 memcpy(&msg_body.bss_params.ssid, 1312 memcpy(&msg_body->bss_params.ssid,
1298 &orig->bss_params.ssid, 1313 &orig->bss_params.ssid,
1299 sizeof(orig->bss_params.ssid)); 1314 sizeof(orig->bss_params.ssid));
1300 1315
1301 msg_body.bss_params.action = orig->bss_params.action; 1316 msg_body->bss_params.action = orig->bss_params.action;
1302 msg_body.bss_params.rateset = orig->bss_params.rateset; 1317 msg_body->bss_params.rateset = orig->bss_params.rateset;
1303 msg_body.bss_params.ht = orig->bss_params.ht; 1318 msg_body->bss_params.ht = orig->bss_params.ht;
1304 msg_body.bss_params.obss_prot_enabled = 1319 msg_body->bss_params.obss_prot_enabled =
1305 orig->bss_params.obss_prot_enabled; 1320 orig->bss_params.obss_prot_enabled;
1306 msg_body.bss_params.rmf = orig->bss_params.rmf; 1321 msg_body->bss_params.rmf = orig->bss_params.rmf;
1307 msg_body.bss_params.ht_oper_mode = orig->bss_params.ht_oper_mode; 1322 msg_body->bss_params.ht_oper_mode = orig->bss_params.ht_oper_mode;
1308 msg_body.bss_params.dual_cts_protection = 1323 msg_body->bss_params.dual_cts_protection =
1309 orig->bss_params.dual_cts_protection; 1324 orig->bss_params.dual_cts_protection;
1310 1325
1311 msg_body.bss_params.max_probe_resp_retry_limit = 1326 msg_body->bss_params.max_probe_resp_retry_limit =
1312 orig->bss_params.max_probe_resp_retry_limit; 1327 orig->bss_params.max_probe_resp_retry_limit;
1313 msg_body.bss_params.hidden_ssid = orig->bss_params.hidden_ssid; 1328 msg_body->bss_params.hidden_ssid = orig->bss_params.hidden_ssid;
1314 msg_body.bss_params.proxy_probe_resp = 1329 msg_body->bss_params.proxy_probe_resp =
1315 orig->bss_params.proxy_probe_resp; 1330 orig->bss_params.proxy_probe_resp;
1316 msg_body.bss_params.edca_params_valid = 1331 msg_body->bss_params.edca_params_valid =
1317 orig->bss_params.edca_params_valid; 1332 orig->bss_params.edca_params_valid;
1318 1333
1319 memcpy(&msg_body.bss_params.acbe, 1334 memcpy(&msg_body->bss_params.acbe,
1320 &orig->bss_params.acbe, 1335 &orig->bss_params.acbe,
1321 sizeof(orig->bss_params.acbe)); 1336 sizeof(orig->bss_params.acbe));
1322 memcpy(&msg_body.bss_params.acbk, 1337 memcpy(&msg_body->bss_params.acbk,
1323 &orig->bss_params.acbk, 1338 &orig->bss_params.acbk,
1324 sizeof(orig->bss_params.acbk)); 1339 sizeof(orig->bss_params.acbk));
1325 memcpy(&msg_body.bss_params.acvi, 1340 memcpy(&msg_body->bss_params.acvi,
1326 &orig->bss_params.acvi, 1341 &orig->bss_params.acvi,
1327 sizeof(orig->bss_params.acvi)); 1342 sizeof(orig->bss_params.acvi));
1328 memcpy(&msg_body.bss_params.acvo, 1343 memcpy(&msg_body->bss_params.acvo,
1329 &orig->bss_params.acvo, 1344 &orig->bss_params.acvo,
1330 sizeof(orig->bss_params.acvo)); 1345 sizeof(orig->bss_params.acvo));
1331 1346
1332 msg_body.bss_params.ext_set_sta_key_param_valid = 1347 msg_body->bss_params.ext_set_sta_key_param_valid =
1333 orig->bss_params.ext_set_sta_key_param_valid; 1348 orig->bss_params.ext_set_sta_key_param_valid;
1334 1349
1335 memcpy(&msg_body.bss_params.ext_set_sta_key_param, 1350 memcpy(&msg_body->bss_params.ext_set_sta_key_param,
1336 &orig->bss_params.ext_set_sta_key_param, 1351 &orig->bss_params.ext_set_sta_key_param,
1337 sizeof(orig->bss_params.acvo)); 1352 sizeof(orig->bss_params.acvo));
1338 1353
1339 msg_body.bss_params.wcn36xx_hal_persona = 1354 msg_body->bss_params.wcn36xx_hal_persona =
1340 orig->bss_params.wcn36xx_hal_persona; 1355 orig->bss_params.wcn36xx_hal_persona;
1341 msg_body.bss_params.spectrum_mgt_enable = 1356 msg_body->bss_params.spectrum_mgt_enable =
1342 orig->bss_params.spectrum_mgt_enable; 1357 orig->bss_params.spectrum_mgt_enable;
1343 msg_body.bss_params.tx_mgmt_power = orig->bss_params.tx_mgmt_power; 1358 msg_body->bss_params.tx_mgmt_power = orig->bss_params.tx_mgmt_power;
1344 msg_body.bss_params.max_tx_power = orig->bss_params.max_tx_power; 1359 msg_body->bss_params.max_tx_power = orig->bss_params.max_tx_power;
1345 1360
1346 wcn36xx_smd_convert_sta_to_v1(wcn, &orig->bss_params.sta, 1361 wcn36xx_smd_convert_sta_to_v1(wcn, &orig->bss_params.sta,
1347 &msg_body.bss_params.sta); 1362 &msg_body->bss_params.sta);
1348 1363
1349 PREPARE_HAL_BUF(wcn->hal_buf, msg_body); 1364 PREPARE_HAL_BUF(wcn->hal_buf, (*msg_body));
1350 1365
1351 wcn36xx_dbg(WCN36XX_DBG_HAL, 1366 wcn36xx_dbg(WCN36XX_DBG_HAL,
1352 "hal config bss v1 bssid %pM self_mac_addr %pM bss_type %d oper_mode %d nw_type %d\n", 1367 "hal config bss v1 bssid %pM self_mac_addr %pM bss_type %d oper_mode %d nw_type %d\n",
@@ -1358,7 +1373,10 @@ static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn,
1358 sta->bssid, sta->action, sta->sta_index, 1373 sta->bssid, sta->action, sta->sta_index,
1359 sta->bssid_index, sta->aid, sta->type, sta->mac); 1374 sta->bssid_index, sta->aid, sta->type, sta->mac);
1360 1375
1361 return wcn36xx_smd_send_and_wait(wcn, msg_body.header.len); 1376 ret = wcn36xx_smd_send_and_wait(wcn, msg_body->header.len);
1377 kfree(msg_body);
1378
1379 return ret;
1362} 1380}
1363 1381
1364 1382
@@ -1410,16 +1428,21 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
1410 struct ieee80211_sta *sta, const u8 *bssid, 1428 struct ieee80211_sta *sta, const u8 *bssid,
1411 bool update) 1429 bool update)
1412{ 1430{
1413 struct wcn36xx_hal_config_bss_req_msg msg; 1431 struct wcn36xx_hal_config_bss_req_msg *msg;
1414 struct wcn36xx_hal_config_bss_params *bss; 1432 struct wcn36xx_hal_config_bss_params *bss;
1415 struct wcn36xx_hal_config_sta_params *sta_params; 1433 struct wcn36xx_hal_config_sta_params *sta_params;
1416 struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif); 1434 struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
1417 int ret; 1435 int ret;
1418 1436
1419 mutex_lock(&wcn->hal_mutex); 1437 mutex_lock(&wcn->hal_mutex);
1420 INIT_HAL_MSG(msg, WCN36XX_HAL_CONFIG_BSS_REQ); 1438 msg = kzalloc(sizeof(*msg), GFP_KERNEL);
1439 if (!msg) {
1440 ret = -ENOMEM;
1441 goto out;
1442 }
1443 INIT_HAL_MSG((*msg), WCN36XX_HAL_CONFIG_BSS_REQ);
1421 1444
1422 bss = &msg.bss_params; 1445 bss = &msg->bss_params;
1423 sta_params = &bss->sta; 1446 sta_params = &bss->sta;
1424 1447
1425 WARN_ON(is_zero_ether_addr(bssid)); 1448 WARN_ON(is_zero_ether_addr(bssid));
@@ -1514,11 +1537,11 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
1514 sta_params->mac); 1537 sta_params->mac);
1515 1538
1516 if (!wcn36xx_is_fw_version(wcn, 1, 2, 2, 24)) { 1539 if (!wcn36xx_is_fw_version(wcn, 1, 2, 2, 24)) {
1517 ret = wcn36xx_smd_config_bss_v1(wcn, &msg); 1540 ret = wcn36xx_smd_config_bss_v1(wcn, msg);
1518 } else { 1541 } else {
1519 PREPARE_HAL_BUF(wcn->hal_buf, msg); 1542 PREPARE_HAL_BUF(wcn->hal_buf, (*msg));
1520 1543
1521 ret = wcn36xx_smd_send_and_wait(wcn, msg.header.len); 1544 ret = wcn36xx_smd_send_and_wait(wcn, msg->header.len);
1522 } 1545 }
1523 if (ret) { 1546 if (ret) {
1524 wcn36xx_err("Sending hal_config_bss failed\n"); 1547 wcn36xx_err("Sending hal_config_bss failed\n");
@@ -1534,6 +1557,7 @@ int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif,
1534 goto out; 1557 goto out;
1535 } 1558 }
1536out: 1559out:
1560 kfree(msg);
1537 mutex_unlock(&wcn->hal_mutex); 1561 mutex_unlock(&wcn->hal_mutex);
1538 return ret; 1562 return ret;
1539} 1563}
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 2414f574bf69..c70854ea5634 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -25,6 +25,22 @@
25 25
26#define WIL_MAX_ROC_DURATION_MS 5000 26#define WIL_MAX_ROC_DURATION_MS 5000
27 27
28#define WIL_EDMG_CHANNEL_9_SUBCHANNELS (BIT(0) | BIT(1))
29#define WIL_EDMG_CHANNEL_10_SUBCHANNELS (BIT(1) | BIT(2))
30#define WIL_EDMG_CHANNEL_11_SUBCHANNELS (BIT(2) | BIT(3))
31
32/* WIL_EDMG_BW_CONFIGURATION define the allowed channel bandwidth
33 * configurations as defined by IEEE 802.11 section 9.4.2.251, Table 13.
34 * The value 5 allowing CB1 and CB2 of adjacent channels.
35 */
36#define WIL_EDMG_BW_CONFIGURATION 5
37
38/* WIL_EDMG_CHANNELS is a bitmap that indicates the 2.16 GHz channel(s) that
39 * are allowed to be used for EDMG transmissions in the BSS as defined by
40 * IEEE 802.11 section 9.4.2.251.
41 */
42#define WIL_EDMG_CHANNELS (BIT(0) | BIT(1) | BIT(2) | BIT(3))
43
28bool disable_ap_sme; 44bool disable_ap_sme;
29module_param(disable_ap_sme, bool, 0444); 45module_param(disable_ap_sme, bool, 0444);
30MODULE_PARM_DESC(disable_ap_sme, " let user space handle AP mode SME"); 46MODULE_PARM_DESC(disable_ap_sme, " let user space handle AP mode SME");
@@ -51,6 +67,39 @@ static struct ieee80211_channel wil_60ghz_channels[] = {
51 CHAN60G(4, 0), 67 CHAN60G(4, 0),
52}; 68};
53 69
70/* Rx channel bonding mode */
71enum wil_rx_cb_mode {
72 WIL_RX_CB_MODE_DMG,
73 WIL_RX_CB_MODE_EDMG,
74 WIL_RX_CB_MODE_WIDE,
75};
76
77static int wil_rx_cb_mode_to_n_bonded(u8 cb_mode)
78{
79 switch (cb_mode) {
80 case WIL_RX_CB_MODE_DMG:
81 case WIL_RX_CB_MODE_EDMG:
82 return 1;
83 case WIL_RX_CB_MODE_WIDE:
84 return 2;
85 default:
86 return 1;
87 }
88}
89
90static int wil_tx_cb_mode_to_n_bonded(u8 cb_mode)
91{
92 switch (cb_mode) {
93 case WMI_TX_MODE_DMG:
94 case WMI_TX_MODE_EDMG_CB1:
95 return 1;
96 case WMI_TX_MODE_EDMG_CB2:
97 return 2;
98 default:
99 return 1;
100 }
101}
102
54static void 103static void
55wil_memdup_ie(u8 **pdst, size_t *pdst_len, const u8 *src, size_t src_len) 104wil_memdup_ie(u8 **pdst, size_t *pdst_len, const u8 *src, size_t src_len)
56{ 105{
@@ -82,6 +131,13 @@ void update_supported_bands(struct wil6210_priv *wil)
82 131
83 wiphy->bands[NL80211_BAND_60GHZ]->n_channels = 132 wiphy->bands[NL80211_BAND_60GHZ]->n_channels =
84 wil_num_supported_channels(wil); 133 wil_num_supported_channels(wil);
134
135 if (test_bit(WMI_FW_CAPABILITY_CHANNEL_BONDING, wil->fw_capabilities)) {
136 wiphy->bands[NL80211_BAND_60GHZ]->edmg_cap.channels =
137 WIL_EDMG_CHANNELS;
138 wiphy->bands[NL80211_BAND_60GHZ]->edmg_cap.bw_config =
139 WIL_EDMG_BW_CONFIGURATION;
140 }
85} 141}
86 142
87/* Vendor id to be used in vendor specific command and events 143/* Vendor id to be used in vendor specific command and events
@@ -275,6 +331,8 @@ static const char * const key_usage_str[] = {
275 [WMI_KEY_USE_PAIRWISE] = "PTK", 331 [WMI_KEY_USE_PAIRWISE] = "PTK",
276 [WMI_KEY_USE_RX_GROUP] = "RX_GTK", 332 [WMI_KEY_USE_RX_GROUP] = "RX_GTK",
277 [WMI_KEY_USE_TX_GROUP] = "TX_GTK", 333 [WMI_KEY_USE_TX_GROUP] = "TX_GTK",
334 [WMI_KEY_USE_STORE_PTK] = "STORE_PTK",
335 [WMI_KEY_USE_APPLY_PTK] = "APPLY_PTK",
278}; 336};
279 337
280int wil_iftype_nl2wmi(enum nl80211_iftype type) 338int wil_iftype_nl2wmi(enum nl80211_iftype type)
@@ -300,6 +358,86 @@ int wil_iftype_nl2wmi(enum nl80211_iftype type)
300 return -EOPNOTSUPP; 358 return -EOPNOTSUPP;
301} 359}
302 360
361int wil_spec2wmi_ch(u8 spec_ch, u8 *wmi_ch)
362{
363 switch (spec_ch) {
364 case 1:
365 *wmi_ch = WMI_CHANNEL_1;
366 break;
367 case 2:
368 *wmi_ch = WMI_CHANNEL_2;
369 break;
370 case 3:
371 *wmi_ch = WMI_CHANNEL_3;
372 break;
373 case 4:
374 *wmi_ch = WMI_CHANNEL_4;
375 break;
376 case 5:
377 *wmi_ch = WMI_CHANNEL_5;
378 break;
379 case 6:
380 *wmi_ch = WMI_CHANNEL_6;
381 break;
382 case 9:
383 *wmi_ch = WMI_CHANNEL_9;
384 break;
385 case 10:
386 *wmi_ch = WMI_CHANNEL_10;
387 break;
388 case 11:
389 *wmi_ch = WMI_CHANNEL_11;
390 break;
391 case 12:
392 *wmi_ch = WMI_CHANNEL_12;
393 break;
394 default:
395 return -EINVAL;
396 }
397
398 return 0;
399}
400
401int wil_wmi2spec_ch(u8 wmi_ch, u8 *spec_ch)
402{
403 switch (wmi_ch) {
404 case WMI_CHANNEL_1:
405 *spec_ch = 1;
406 break;
407 case WMI_CHANNEL_2:
408 *spec_ch = 2;
409 break;
410 case WMI_CHANNEL_3:
411 *spec_ch = 3;
412 break;
413 case WMI_CHANNEL_4:
414 *spec_ch = 4;
415 break;
416 case WMI_CHANNEL_5:
417 *spec_ch = 5;
418 break;
419 case WMI_CHANNEL_6:
420 *spec_ch = 6;
421 break;
422 case WMI_CHANNEL_9:
423 *spec_ch = 9;
424 break;
425 case WMI_CHANNEL_10:
426 *spec_ch = 10;
427 break;
428 case WMI_CHANNEL_11:
429 *spec_ch = 11;
430 break;
431 case WMI_CHANNEL_12:
432 *spec_ch = 12;
433 break;
434 default:
435 return -EINVAL;
436 }
437
438 return 0;
439}
440
303int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid, 441int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
304 struct station_info *sinfo) 442 struct station_info *sinfo)
305{ 443{
@@ -314,6 +452,7 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
314 } __packed reply; 452 } __packed reply;
315 struct wil_net_stats *stats = &wil->sta[cid].stats; 453 struct wil_net_stats *stats = &wil->sta[cid].stats;
316 int rc; 454 int rc;
455 u8 txflag = RATE_INFO_FLAGS_DMG;
317 456
318 memset(&reply, 0, sizeof(reply)); 457 memset(&reply, 0, sizeof(reply));
319 458
@@ -327,7 +466,8 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
327 " MCS %d TSF 0x%016llx\n" 466 " MCS %d TSF 0x%016llx\n"
328 " BF status 0x%08x RSSI %d SQI %d%%\n" 467 " BF status 0x%08x RSSI %d SQI %d%%\n"
329 " Tx Tpt %d goodput %d Rx goodput %d\n" 468 " Tx Tpt %d goodput %d Rx goodput %d\n"
330 " Sectors(rx:tx) my %d:%d peer %d:%d\n""}\n", 469 " Sectors(rx:tx) my %d:%d peer %d:%d\n"
470 " Tx mode %d}\n",
331 cid, vif->mid, le16_to_cpu(reply.evt.bf_mcs), 471 cid, vif->mid, le16_to_cpu(reply.evt.bf_mcs),
332 le64_to_cpu(reply.evt.tsf), reply.evt.status, 472 le64_to_cpu(reply.evt.tsf), reply.evt.status,
333 reply.evt.rssi, 473 reply.evt.rssi,
@@ -338,7 +478,8 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
338 le16_to_cpu(reply.evt.my_rx_sector), 478 le16_to_cpu(reply.evt.my_rx_sector),
339 le16_to_cpu(reply.evt.my_tx_sector), 479 le16_to_cpu(reply.evt.my_tx_sector),
340 le16_to_cpu(reply.evt.other_rx_sector), 480 le16_to_cpu(reply.evt.other_rx_sector),
341 le16_to_cpu(reply.evt.other_tx_sector)); 481 le16_to_cpu(reply.evt.other_tx_sector),
482 reply.evt.tx_mode);
342 483
343 sinfo->generation = wil->sinfo_gen; 484 sinfo->generation = wil->sinfo_gen;
344 485
@@ -351,9 +492,16 @@ int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid,
351 BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC) | 492 BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC) |
352 BIT_ULL(NL80211_STA_INFO_TX_FAILED); 493 BIT_ULL(NL80211_STA_INFO_TX_FAILED);
353 494
354 sinfo->txrate.flags = RATE_INFO_FLAGS_DMG; 495 if (wil->use_enhanced_dma_hw && reply.evt.tx_mode != WMI_TX_MODE_DMG)
496 txflag = RATE_INFO_FLAGS_EDMG;
497
498 sinfo->txrate.flags = txflag;
355 sinfo->txrate.mcs = le16_to_cpu(reply.evt.bf_mcs); 499 sinfo->txrate.mcs = le16_to_cpu(reply.evt.bf_mcs);
356 sinfo->rxrate.mcs = stats->last_mcs_rx; 500 sinfo->rxrate.mcs = stats->last_mcs_rx;
501 sinfo->txrate.n_bonded_ch =
502 wil_tx_cb_mode_to_n_bonded(reply.evt.tx_mode);
503 sinfo->rxrate.n_bonded_ch =
504 wil_rx_cb_mode_to_n_bonded(stats->last_cb_mode_rx);
357 sinfo->rx_bytes = stats->rx_bytes; 505 sinfo->rx_bytes = stats->rx_bytes;
358 sinfo->rx_packets = stats->rx_packets; 506 sinfo->rx_packets = stats->rx_packets;
359 sinfo->rx_dropped_misc = stats->rx_dropped; 507 sinfo->rx_dropped_misc = stats->rx_dropped;
@@ -396,7 +544,7 @@ static int wil_cfg80211_get_station(struct wiphy *wiphy,
396/* 544/*
397 * Find @idx-th active STA for specific MID for station dump. 545 * Find @idx-th active STA for specific MID for station dump.
398 */ 546 */
399static int wil_find_cid_by_idx(struct wil6210_priv *wil, u8 mid, int idx) 547int wil_find_cid_by_idx(struct wil6210_priv *wil, u8 mid, int idx)
400{ 548{
401 int i; 549 int i;
402 550
@@ -1022,6 +1170,33 @@ static int wil_ft_connect(struct wiphy *wiphy,
1022 return rc; 1170 return rc;
1023} 1171}
1024 1172
1173static int wil_get_wmi_edmg_channel(struct wil6210_priv *wil, u8 edmg_bw_config,
1174 u8 edmg_channels, u8 *wmi_ch)
1175{
1176 if (!edmg_bw_config) {
1177 *wmi_ch = 0;
1178 return 0;
1179 } else if (edmg_bw_config == WIL_EDMG_BW_CONFIGURATION) {
1180 /* convert from edmg channel bitmap into edmg channel number */
1181 switch (edmg_channels) {
1182 case WIL_EDMG_CHANNEL_9_SUBCHANNELS:
1183 return wil_spec2wmi_ch(9, wmi_ch);
1184 case WIL_EDMG_CHANNEL_10_SUBCHANNELS:
1185 return wil_spec2wmi_ch(10, wmi_ch);
1186 case WIL_EDMG_CHANNEL_11_SUBCHANNELS:
1187 return wil_spec2wmi_ch(11, wmi_ch);
1188 default:
1189 wil_err(wil, "Unsupported edmg channel bitmap 0x%x\n",
1190 edmg_channels);
1191 return -EINVAL;
1192 }
1193 } else {
1194 wil_err(wil, "Unsupported EDMG BW configuration %d\n",
1195 edmg_bw_config);
1196 return -EINVAL;
1197 }
1198}
1199
1025static int wil_cfg80211_connect(struct wiphy *wiphy, 1200static int wil_cfg80211_connect(struct wiphy *wiphy,
1026 struct net_device *ndev, 1201 struct net_device *ndev,
1027 struct cfg80211_connect_params *sme) 1202 struct cfg80211_connect_params *sme)
@@ -1167,6 +1342,11 @@ static int wil_cfg80211_connect(struct wiphy *wiphy,
1167 memcpy(conn.ssid, ssid_eid+2, conn.ssid_len); 1342 memcpy(conn.ssid, ssid_eid+2, conn.ssid_len);
1168 conn.channel = ch - 1; 1343 conn.channel = ch - 1;
1169 1344
1345 rc = wil_get_wmi_edmg_channel(wil, sme->edmg.bw_config,
1346 sme->edmg.channels, &conn.edmg_channel);
1347 if (rc < 0)
1348 return rc;
1349
1170 ether_addr_copy(conn.bssid, bss->bssid); 1350 ether_addr_copy(conn.bssid, bss->bssid);
1171 ether_addr_copy(conn.dst_mac, bss->bssid); 1351 ether_addr_copy(conn.dst_mac, bss->bssid);
1172 1352
@@ -1376,6 +1556,7 @@ void wil_set_crypto_rx(u8 key_index, enum wmi_key_usage key_usage,
1376 return; 1556 return;
1377 1557
1378 switch (key_usage) { 1558 switch (key_usage) {
1559 case WMI_KEY_USE_STORE_PTK:
1379 case WMI_KEY_USE_PAIRWISE: 1560 case WMI_KEY_USE_PAIRWISE:
1380 for (tid = 0; tid < WIL_STA_TID_NUM; tid++) { 1561 for (tid = 0; tid < WIL_STA_TID_NUM; tid++) {
1381 cc = &cs->tid_crypto_rx[tid].key_id[key_index]; 1562 cc = &cs->tid_crypto_rx[tid].key_id[key_index];
@@ -1473,6 +1654,16 @@ static int wil_cfg80211_add_key(struct wiphy *wiphy,
1473 return -EINVAL; 1654 return -EINVAL;
1474 } 1655 }
1475 1656
1657 spin_lock_bh(&wil->eap_lock);
1658 if (pairwise && wdev->iftype == NL80211_IFTYPE_STATION &&
1659 (vif->ptk_rekey_state == WIL_REKEY_M3_RECEIVED ||
1660 vif->ptk_rekey_state == WIL_REKEY_WAIT_M4_SENT)) {
1661 key_usage = WMI_KEY_USE_STORE_PTK;
1662 vif->ptk_rekey_state = WIL_REKEY_WAIT_M4_SENT;
1663 wil_dbg_misc(wil, "Store EAPOL key\n");
1664 }
1665 spin_unlock_bh(&wil->eap_lock);
1666
1476 rc = wmi_add_cipher_key(vif, key_index, mac_addr, params->key_len, 1667 rc = wmi_add_cipher_key(vif, key_index, mac_addr, params->key_len,
1477 params->key, key_usage); 1668 params->key, key_usage);
1478 if (!rc && !IS_ERR(cs)) { 1669 if (!rc && !IS_ERR(cs)) {
@@ -1728,7 +1919,7 @@ out:
1728static int _wil_cfg80211_start_ap(struct wiphy *wiphy, 1919static int _wil_cfg80211_start_ap(struct wiphy *wiphy,
1729 struct net_device *ndev, 1920 struct net_device *ndev,
1730 const u8 *ssid, size_t ssid_len, u32 privacy, 1921 const u8 *ssid, size_t ssid_len, u32 privacy,
1731 int bi, u8 chan, 1922 int bi, u8 chan, u8 wmi_edmg_channel,
1732 struct cfg80211_beacon_data *bcon, 1923 struct cfg80211_beacon_data *bcon,
1733 u8 hidden_ssid, u32 pbss) 1924 u8 hidden_ssid, u32 pbss)
1734{ 1925{
@@ -1791,6 +1982,7 @@ static int _wil_cfg80211_start_ap(struct wiphy *wiphy,
1791 1982
1792 vif->privacy = privacy; 1983 vif->privacy = privacy;
1793 vif->channel = chan; 1984 vif->channel = chan;
1985 vif->wmi_edmg_channel = wmi_edmg_channel;
1794 vif->hidden_ssid = hidden_ssid; 1986 vif->hidden_ssid = hidden_ssid;
1795 vif->pbss = pbss; 1987 vif->pbss = pbss;
1796 vif->bi = bi; 1988 vif->bi = bi;
@@ -1801,7 +1993,8 @@ static int _wil_cfg80211_start_ap(struct wiphy *wiphy,
1801 if (!wil_has_other_active_ifaces(wil, ndev, false, true)) 1993 if (!wil_has_other_active_ifaces(wil, ndev, false, true))
1802 wil6210_bus_request(wil, WIL_MAX_BUS_REQUEST_KBPS); 1994 wil6210_bus_request(wil, WIL_MAX_BUS_REQUEST_KBPS);
1803 1995
1804 rc = wmi_pcp_start(vif, bi, wmi_nettype, chan, hidden_ssid, is_go); 1996 rc = wmi_pcp_start(vif, bi, wmi_nettype, chan, wmi_edmg_channel,
1997 hidden_ssid, is_go);
1805 if (rc) 1998 if (rc)
1806 goto err_pcp_start; 1999 goto err_pcp_start;
1807 2000
@@ -1853,7 +2046,8 @@ void wil_cfg80211_ap_recovery(struct wil6210_priv *wil)
1853 rc = _wil_cfg80211_start_ap(wiphy, ndev, 2046 rc = _wil_cfg80211_start_ap(wiphy, ndev,
1854 vif->ssid, vif->ssid_len, 2047 vif->ssid, vif->ssid_len,
1855 vif->privacy, vif->bi, 2048 vif->privacy, vif->bi,
1856 vif->channel, &bcon, 2049 vif->channel,
2050 vif->wmi_edmg_channel, &bcon,
1857 vif->hidden_ssid, vif->pbss); 2051 vif->hidden_ssid, vif->pbss);
1858 if (rc) { 2052 if (rc) {
1859 wil_err(wil, "vif %d recovery failed (%d)\n", i, rc); 2053 wil_err(wil, "vif %d recovery failed (%d)\n", i, rc);
@@ -1903,7 +2097,8 @@ static int wil_cfg80211_change_beacon(struct wiphy *wiphy,
1903 rc = _wil_cfg80211_start_ap(wiphy, ndev, vif->ssid, 2097 rc = _wil_cfg80211_start_ap(wiphy, ndev, vif->ssid,
1904 vif->ssid_len, privacy, 2098 vif->ssid_len, privacy,
1905 wdev->beacon_interval, 2099 wdev->beacon_interval,
1906 vif->channel, bcon, 2100 vif->channel,
2101 vif->wmi_edmg_channel, bcon,
1907 vif->hidden_ssid, 2102 vif->hidden_ssid,
1908 vif->pbss); 2103 vif->pbss);
1909 } else { 2104 } else {
@@ -1922,10 +2117,17 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
1922 struct ieee80211_channel *channel = info->chandef.chan; 2117 struct ieee80211_channel *channel = info->chandef.chan;
1923 struct cfg80211_beacon_data *bcon = &info->beacon; 2118 struct cfg80211_beacon_data *bcon = &info->beacon;
1924 struct cfg80211_crypto_settings *crypto = &info->crypto; 2119 struct cfg80211_crypto_settings *crypto = &info->crypto;
2120 u8 wmi_edmg_channel;
1925 u8 hidden_ssid; 2121 u8 hidden_ssid;
1926 2122
1927 wil_dbg_misc(wil, "start_ap\n"); 2123 wil_dbg_misc(wil, "start_ap\n");
1928 2124
2125 rc = wil_get_wmi_edmg_channel(wil, info->chandef.edmg.bw_config,
2126 info->chandef.edmg.channels,
2127 &wmi_edmg_channel);
2128 if (rc < 0)
2129 return rc;
2130
1929 if (!channel) { 2131 if (!channel) {
1930 wil_err(wil, "AP: No channel???\n"); 2132 wil_err(wil, "AP: No channel???\n");
1931 return -EINVAL; 2133 return -EINVAL;
@@ -1965,7 +2167,8 @@ static int wil_cfg80211_start_ap(struct wiphy *wiphy,
1965 rc = _wil_cfg80211_start_ap(wiphy, ndev, 2167 rc = _wil_cfg80211_start_ap(wiphy, ndev,
1966 info->ssid, info->ssid_len, info->privacy, 2168 info->ssid, info->ssid_len, info->privacy,
1967 info->beacon_interval, channel->hw_value, 2169 info->beacon_interval, channel->hw_value,
1968 bcon, hidden_ssid, info->pbss); 2170 wmi_edmg_channel, bcon, hidden_ssid,
2171 info->pbss);
1969 2172
1970 return rc; 2173 return rc;
1971} 2174}
diff --git a/drivers/net/wireless/ath/wil6210/debugfs.c b/drivers/net/wireless/ath/wil6210/debugfs.c
index fd3b2b3d1b5c..304b4d4e506a 100644
--- a/drivers/net/wireless/ath/wil6210/debugfs.c
+++ b/drivers/net/wireless/ath/wil6210/debugfs.c
@@ -393,7 +393,8 @@ static int wil_debugfs_iomem_x32_set(void *data, u64 val)
393 if (ret < 0) 393 if (ret < 0)
394 return ret; 394 return ret;
395 395
396 writel(val, (void __iomem *)d->offset); 396 writel_relaxed(val, (void __iomem *)d->offset);
397
397 wmb(); /* make sure write propagated to HW */ 398 wmb(); /* make sure write propagated to HW */
398 399
399 wil_pm_runtime_put(wil); 400 wil_pm_runtime_put(wil);
@@ -959,6 +960,18 @@ static const struct file_operations fops_pmcdata = {
959 .llseek = wil_pmc_llseek, 960 .llseek = wil_pmc_llseek,
960}; 961};
961 962
963static int wil_pmcring_seq_open(struct inode *inode, struct file *file)
964{
965 return single_open(file, wil_pmcring_read, inode->i_private);
966}
967
968static const struct file_operations fops_pmcring = {
969 .open = wil_pmcring_seq_open,
970 .release = single_release,
971 .read = seq_read,
972 .llseek = seq_lseek,
973};
974
962/*---tx_mgmt---*/ 975/*---tx_mgmt---*/
963/* Write mgmt frame to this file to send it */ 976/* Write mgmt frame to this file to send it */
964static ssize_t wil_write_file_txmgmt(struct file *file, const char __user *buf, 977static ssize_t wil_write_file_txmgmt(struct file *file, const char __user *buf,
@@ -2371,6 +2384,7 @@ static const struct {
2371 {"back", 0644, &fops_back}, 2384 {"back", 0644, &fops_back},
2372 {"pmccfg", 0644, &fops_pmccfg}, 2385 {"pmccfg", 0644, &fops_pmccfg},
2373 {"pmcdata", 0444, &fops_pmcdata}, 2386 {"pmcdata", 0444, &fops_pmcdata},
2387 {"pmcring", 0444, &fops_pmcring},
2374 {"temp", 0444, &temp_fops}, 2388 {"temp", 0444, &temp_fops},
2375 {"freq", 0444, &freq_fops}, 2389 {"freq", 0444, &freq_fops},
2376 {"link", 0444, &link_fops}, 2390 {"link", 0444, &link_fops},
diff --git a/drivers/net/wireless/ath/wil6210/main.c b/drivers/net/wireless/ath/wil6210/main.c
index 173561fe593d..9b72202eeadc 100644
--- a/drivers/net/wireless/ath/wil6210/main.c
+++ b/drivers/net/wireless/ath/wil6210/main.c
@@ -373,6 +373,7 @@ static void _wil6210_disconnect_complete(struct wil6210_vif *vif,
373 } 373 }
374 clear_bit(wil_vif_fwconnecting, vif->status); 374 clear_bit(wil_vif_fwconnecting, vif->status);
375 clear_bit(wil_vif_ft_roam, vif->status); 375 clear_bit(wil_vif_ft_roam, vif->status);
376 vif->ptk_rekey_state = WIL_REKEY_IDLE;
376 377
377 break; 378 break;
378 case NL80211_IFTYPE_AP: 379 case NL80211_IFTYPE_AP:
@@ -724,6 +725,8 @@ int wil_priv_init(struct wil6210_priv *wil)
724 INIT_LIST_HEAD(&wil->pending_wmi_ev); 725 INIT_LIST_HEAD(&wil->pending_wmi_ev);
725 spin_lock_init(&wil->wmi_ev_lock); 726 spin_lock_init(&wil->wmi_ev_lock);
726 spin_lock_init(&wil->net_queue_lock); 727 spin_lock_init(&wil->net_queue_lock);
728 spin_lock_init(&wil->eap_lock);
729
727 init_waitqueue_head(&wil->wq); 730 init_waitqueue_head(&wil->wq);
728 init_rwsem(&wil->mem_lock); 731 init_rwsem(&wil->mem_lock);
729 732
@@ -1654,6 +1657,7 @@ int wil_reset(struct wil6210_priv *wil, bool load_fw)
1654 cancel_work_sync(&vif->disconnect_worker); 1657 cancel_work_sync(&vif->disconnect_worker);
1655 wil6210_disconnect(vif, NULL, 1658 wil6210_disconnect(vif, NULL,
1656 WLAN_REASON_DEAUTH_LEAVING); 1659 WLAN_REASON_DEAUTH_LEAVING);
1660 vif->ptk_rekey_state = WIL_REKEY_IDLE;
1657 } 1661 }
1658 } 1662 }
1659 wil_bcast_fini_all(wil); 1663 wil_bcast_fini_all(wil);
diff --git a/drivers/net/wireless/ath/wil6210/netdev.c b/drivers/net/wireless/ath/wil6210/netdev.c
index 59f041d708fe..a87bb84a8286 100644
--- a/drivers/net/wireless/ath/wil6210/netdev.c
+++ b/drivers/net/wireless/ath/wil6210/netdev.c
@@ -218,6 +218,7 @@ static void wil_vif_deinit(struct wil6210_vif *vif)
218 cancel_work_sync(&vif->p2p.delayed_listen_work); 218 cancel_work_sync(&vif->p2p.delayed_listen_work);
219 wil_probe_client_flush(vif); 219 wil_probe_client_flush(vif);
220 cancel_work_sync(&vif->probe_client_worker); 220 cancel_work_sync(&vif->probe_client_worker);
221 cancel_work_sync(&vif->enable_tx_key_worker);
221} 222}
222 223
223void wil_vif_free(struct wil6210_vif *vif) 224void wil_vif_free(struct wil6210_vif *vif)
@@ -283,7 +284,9 @@ static void wil_vif_init(struct wil6210_vif *vif)
283 284
284 INIT_WORK(&vif->probe_client_worker, wil_probe_client_worker); 285 INIT_WORK(&vif->probe_client_worker, wil_probe_client_worker);
285 INIT_WORK(&vif->disconnect_worker, wil_disconnect_worker); 286 INIT_WORK(&vif->disconnect_worker, wil_disconnect_worker);
287 INIT_WORK(&vif->p2p.discovery_expired_work, wil_p2p_listen_expired);
286 INIT_WORK(&vif->p2p.delayed_listen_work, wil_p2p_delayed_listen_work); 288 INIT_WORK(&vif->p2p.delayed_listen_work, wil_p2p_delayed_listen_work);
289 INIT_WORK(&vif->enable_tx_key_worker, wil_enable_tx_key_worker);
287 290
288 INIT_LIST_HEAD(&vif->probe_client_pending); 291 INIT_LIST_HEAD(&vif->probe_client_pending);
289 292
@@ -540,6 +543,7 @@ void wil_vif_remove(struct wil6210_priv *wil, u8 mid)
540 cancel_work_sync(&vif->disconnect_worker); 543 cancel_work_sync(&vif->disconnect_worker);
541 wil_probe_client_flush(vif); 544 wil_probe_client_flush(vif);
542 cancel_work_sync(&vif->probe_client_worker); 545 cancel_work_sync(&vif->probe_client_worker);
546 cancel_work_sync(&vif->enable_tx_key_worker);
543 /* for VIFs, ndev will be freed by destructor after RTNL is unlocked. 547 /* for VIFs, ndev will be freed by destructor after RTNL is unlocked.
544 * the main interface will be freed in wil_if_free, we need to keep it 548 * the main interface will be freed in wil_if_free, we need to keep it
545 * a bit longer so logging macros will work. 549 * a bit longer so logging macros will work.
diff --git a/drivers/net/wireless/ath/wil6210/pcie_bus.c b/drivers/net/wireless/ath/wil6210/pcie_bus.c
index 9f5a914abc18..18dd8b246022 100644
--- a/drivers/net/wireless/ath/wil6210/pcie_bus.c
+++ b/drivers/net/wireless/ath/wil6210/pcie_bus.c
@@ -435,7 +435,7 @@ static int wil_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
435 mutex_unlock(&wil->mutex); 435 mutex_unlock(&wil->mutex);
436 if (rc) { 436 if (rc) {
437 wil_err(wil, "failed to load WMI only FW\n"); 437 wil_err(wil, "failed to load WMI only FW\n");
438 goto if_remove; 438 /* ignore the error to allow debugging */
439 } 439 }
440 } 440 }
441 441
@@ -455,8 +455,6 @@ static int wil_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
455 455
456 return 0; 456 return 0;
457 457
458if_remove:
459 wil_if_remove(wil);
460bus_disable: 458bus_disable:
461 wil_if_pcie_disable(wil); 459 wil_if_pcie_disable(wil);
462err_iounmap: 460err_iounmap:
diff --git a/drivers/net/wireless/ath/wil6210/pmc.c b/drivers/net/wireless/ath/wil6210/pmc.c
index c49f7988369e..4b7ac14fc2a7 100644
--- a/drivers/net/wireless/ath/wil6210/pmc.c
+++ b/drivers/net/wireless/ath/wil6210/pmc.c
@@ -18,6 +18,7 @@
18#include <linux/types.h> 18#include <linux/types.h>
19#include <linux/errno.h> 19#include <linux/errno.h>
20#include <linux/fs.h> 20#include <linux/fs.h>
21#include <linux/seq_file.h>
21#include "wmi.h" 22#include "wmi.h"
22#include "wil6210.h" 23#include "wil6210.h"
23#include "txrx.h" 24#include "txrx.h"
@@ -431,3 +432,28 @@ out:
431 432
432 return newpos; 433 return newpos;
433} 434}
435
436int wil_pmcring_read(struct seq_file *s, void *data)
437{
438 struct wil6210_priv *wil = s->private;
439 struct pmc_ctx *pmc = &wil->pmc;
440 size_t pmc_ring_size =
441 sizeof(struct vring_rx_desc) * pmc->num_descriptors;
442
443 mutex_lock(&pmc->lock);
444
445 if (!wil_is_pmc_allocated(pmc)) {
446 wil_err(wil, "error, pmc is not allocated!\n");
447 pmc->last_cmd_status = -EPERM;
448 mutex_unlock(&pmc->lock);
449 return -EPERM;
450 }
451
452 wil_dbg_misc(wil, "pmcring_read: size %zu\n", pmc_ring_size);
453
454 seq_write(s, pmc->pring_va, pmc_ring_size);
455
456 mutex_unlock(&pmc->lock);
457
458 return 0;
459}
diff --git a/drivers/net/wireless/ath/wil6210/pmc.h b/drivers/net/wireless/ath/wil6210/pmc.h
index bebc8d52e1e6..92b8c4d84a6a 100644
--- a/drivers/net/wireless/ath/wil6210/pmc.h
+++ b/drivers/net/wireless/ath/wil6210/pmc.h
@@ -25,3 +25,4 @@ void wil_pmc_free(struct wil6210_priv *wil, int send_pmc_cmd);
25int wil_pmc_last_cmd_status(struct wil6210_priv *wil); 25int wil_pmc_last_cmd_status(struct wil6210_priv *wil);
26ssize_t wil_pmc_read(struct file *, char __user *, size_t, loff_t *); 26ssize_t wil_pmc_read(struct file *, char __user *, size_t, loff_t *);
27loff_t wil_pmc_llseek(struct file *filp, loff_t off, int whence); 27loff_t wil_pmc_llseek(struct file *filp, loff_t off, int whence);
28int wil_pmcring_read(struct seq_file *s, void *data);
diff --git a/drivers/net/wireless/ath/wil6210/rx_reorder.c b/drivers/net/wireless/ath/wil6210/rx_reorder.c
index 784239bcb3a6..13246d216803 100644
--- a/drivers/net/wireless/ath/wil6210/rx_reorder.c
+++ b/drivers/net/wireless/ath/wil6210/rx_reorder.c
@@ -260,7 +260,6 @@ struct wil_tid_ampdu_rx *wil_tid_ampdu_rx_alloc(struct wil6210_priv *wil,
260 r->reorder_buf = 260 r->reorder_buf =
261 kcalloc(size, sizeof(struct sk_buff *), GFP_KERNEL); 261 kcalloc(size, sizeof(struct sk_buff *), GFP_KERNEL);
262 if (!r->reorder_buf) { 262 if (!r->reorder_buf) {
263 kfree(r->reorder_buf);
264 kfree(r); 263 kfree(r);
265 return NULL; 264 return NULL;
266 } 265 }
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 8b01ef8269da..cb13652491ad 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -725,24 +725,198 @@ static void wil_get_netif_rx_params(struct sk_buff *skb, int *cid,
725} 725}
726 726
727/* 727/*
728 * Check if skb is ptk eapol key message
729 *
730 * returns a pointer to the start of the eapol key structure, NULL
731 * if frame is not PTK eapol key
732 */
733static struct wil_eapol_key *wil_is_ptk_eapol_key(struct wil6210_priv *wil,
734 struct sk_buff *skb)
735{
736 u8 *buf;
737 const struct wil_1x_hdr *hdr;
738 struct wil_eapol_key *key;
739 u16 key_info;
740 int len = skb->len;
741
742 if (!skb_mac_header_was_set(skb)) {
743 wil_err(wil, "mac header was not set\n");
744 return NULL;
745 }
746
747 len -= skb_mac_offset(skb);
748
749 if (len < sizeof(struct ethhdr) + sizeof(struct wil_1x_hdr) +
750 sizeof(struct wil_eapol_key))
751 return NULL;
752
753 buf = skb_mac_header(skb) + sizeof(struct ethhdr);
754
755 hdr = (const struct wil_1x_hdr *)buf;
756 if (hdr->type != WIL_1X_TYPE_EAPOL_KEY)
757 return NULL;
758
759 key = (struct wil_eapol_key *)(buf + sizeof(struct wil_1x_hdr));
760 if (key->type != WIL_EAPOL_KEY_TYPE_WPA &&
761 key->type != WIL_EAPOL_KEY_TYPE_RSN)
762 return NULL;
763
764 key_info = be16_to_cpu(key->key_info);
765 if (!(key_info & WIL_KEY_INFO_KEY_TYPE)) /* check if pairwise */
766 return NULL;
767
768 return key;
769}
770
771static bool wil_skb_is_eap_3(struct wil6210_priv *wil, struct sk_buff *skb)
772{
773 struct wil_eapol_key *key;
774 u16 key_info;
775
776 key = wil_is_ptk_eapol_key(wil, skb);
777 if (!key)
778 return false;
779
780 key_info = be16_to_cpu(key->key_info);
781 if (key_info & (WIL_KEY_INFO_MIC |
782 WIL_KEY_INFO_ENCR_KEY_DATA)) {
783 /* 3/4 of 4-Way Handshake */
784 wil_dbg_misc(wil, "EAPOL key message 3\n");
785 return true;
786 }
787 /* 1/4 of 4-Way Handshake */
788 wil_dbg_misc(wil, "EAPOL key message 1\n");
789
790 return false;
791}
792
793static bool wil_skb_is_eap_4(struct wil6210_priv *wil, struct sk_buff *skb)
794{
795 struct wil_eapol_key *key;
796 u32 *nonce, i;
797
798 key = wil_is_ptk_eapol_key(wil, skb);
799 if (!key)
800 return false;
801
802 nonce = (u32 *)key->key_nonce;
803 for (i = 0; i < WIL_EAP_NONCE_LEN / sizeof(u32); i++, nonce++) {
804 if (*nonce != 0) {
805 /* message 2/4 */
806 wil_dbg_misc(wil, "EAPOL key message 2\n");
807 return false;
808 }
809 }
810 wil_dbg_misc(wil, "EAPOL key message 4\n");
811
812 return true;
813}
814
815void wil_enable_tx_key_worker(struct work_struct *work)
816{
817 struct wil6210_vif *vif = container_of(work,
818 struct wil6210_vif, enable_tx_key_worker);
819 struct wil6210_priv *wil = vif_to_wil(vif);
820 int rc, cid;
821
822 rtnl_lock();
823 if (vif->ptk_rekey_state != WIL_REKEY_WAIT_M4_SENT) {
824 wil_dbg_misc(wil, "Invalid rekey state = %d\n",
825 vif->ptk_rekey_state);
826 rtnl_unlock();
827 return;
828 }
829
830 cid = wil_find_cid_by_idx(wil, vif->mid, 0);
831 if (!wil_cid_valid(wil, cid)) {
832 wil_err(wil, "Invalid cid = %d\n", cid);
833 rtnl_unlock();
834 return;
835 }
836
837 wil_dbg_misc(wil, "Apply PTK key after eapol was sent out\n");
838 rc = wmi_add_cipher_key(vif, 0, wil->sta[cid].addr, 0, NULL,
839 WMI_KEY_USE_APPLY_PTK);
840
841 vif->ptk_rekey_state = WIL_REKEY_IDLE;
842 rtnl_unlock();
843
844 if (rc)
845 wil_err(wil, "Apply PTK key failed %d\n", rc);
846}
847
848void wil_tx_complete_handle_eapol(struct wil6210_vif *vif, struct sk_buff *skb)
849{
850 struct wil6210_priv *wil = vif_to_wil(vif);
851 struct wireless_dev *wdev = vif_to_wdev(vif);
852 bool q = false;
853
854 if (wdev->iftype != NL80211_IFTYPE_STATION ||
855 !test_bit(WMI_FW_CAPABILITY_SPLIT_REKEY, wil->fw_capabilities))
856 return;
857
858 /* check if skb is an EAP message 4/4 */
859 if (!wil_skb_is_eap_4(wil, skb))
860 return;
861
862 spin_lock_bh(&wil->eap_lock);
863 switch (vif->ptk_rekey_state) {
864 case WIL_REKEY_IDLE:
865 /* ignore idle state, can happen due to M4 retransmission */
866 break;
867 case WIL_REKEY_M3_RECEIVED:
868 vif->ptk_rekey_state = WIL_REKEY_IDLE;
869 break;
870 case WIL_REKEY_WAIT_M4_SENT:
871 q = true;
872 break;
873 default:
874 wil_err(wil, "Unknown rekey state = %d",
875 vif->ptk_rekey_state);
876 }
877 spin_unlock_bh(&wil->eap_lock);
878
879 if (q) {
880 q = queue_work(wil->wmi_wq, &vif->enable_tx_key_worker);
881 wil_dbg_misc(wil, "queue_work of enable_tx_key_worker -> %d\n",
882 q);
883 }
884}
885
886static void wil_rx_handle_eapol(struct wil6210_vif *vif, struct sk_buff *skb)
887{
888 struct wil6210_priv *wil = vif_to_wil(vif);
889 struct wireless_dev *wdev = vif_to_wdev(vif);
890
891 if (wdev->iftype != NL80211_IFTYPE_STATION ||
892 !test_bit(WMI_FW_CAPABILITY_SPLIT_REKEY, wil->fw_capabilities))
893 return;
894
895 /* check if skb is a EAP message 3/4 */
896 if (!wil_skb_is_eap_3(wil, skb))
897 return;
898
899 if (vif->ptk_rekey_state == WIL_REKEY_IDLE)
900 vif->ptk_rekey_state = WIL_REKEY_M3_RECEIVED;
901}
902
903/*
728 * Pass Rx packet to the netif. Update statistics. 904 * Pass Rx packet to the netif. Update statistics.
729 * Called in softirq context (NAPI poll). 905 * Called in softirq context (NAPI poll).
730 */ 906 */
731void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev) 907void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
908 struct wil_net_stats *stats, bool gro)
732{ 909{
733 gro_result_t rc = GRO_NORMAL; 910 gro_result_t rc = GRO_NORMAL;
734 struct wil6210_vif *vif = ndev_to_vif(ndev); 911 struct wil6210_vif *vif = ndev_to_vif(ndev);
735 struct wil6210_priv *wil = ndev_to_wil(ndev); 912 struct wil6210_priv *wil = ndev_to_wil(ndev);
736 struct wireless_dev *wdev = vif_to_wdev(vif); 913 struct wireless_dev *wdev = vif_to_wdev(vif);
737 unsigned int len = skb->len; 914 unsigned int len = skb->len;
738 int cid;
739 int security;
740 u8 *sa, *da = wil_skb_get_da(skb); 915 u8 *sa, *da = wil_skb_get_da(skb);
741 /* here looking for DA, not A1, thus Rxdesc's 'mcast' indication 916 /* here looking for DA, not A1, thus Rxdesc's 'mcast' indication
742 * is not suitable, need to look at data 917 * is not suitable, need to look at data
743 */ 918 */
744 int mcast = is_multicast_ether_addr(da); 919 int mcast = is_multicast_ether_addr(da);
745 struct wil_net_stats *stats;
746 struct sk_buff *xmit_skb = NULL; 920 struct sk_buff *xmit_skb = NULL;
747 static const char * const gro_res_str[] = { 921 static const char * const gro_res_str[] = {
748 [GRO_MERGED] = "GRO_MERGED", 922 [GRO_MERGED] = "GRO_MERGED",
@@ -753,25 +927,6 @@ void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
753 [GRO_CONSUMED] = "GRO_CONSUMED", 927 [GRO_CONSUMED] = "GRO_CONSUMED",
754 }; 928 };
755 929
756 wil->txrx_ops.get_netif_rx_params(skb, &cid, &security);
757
758 stats = &wil->sta[cid].stats;
759
760 skb_orphan(skb);
761
762 if (security && (wil->txrx_ops.rx_crypto_check(wil, skb) != 0)) {
763 rc = GRO_DROP;
764 dev_kfree_skb(skb);
765 stats->rx_replay++;
766 goto stats;
767 }
768
769 /* check errors reported by HW and update statistics */
770 if (unlikely(wil->txrx_ops.rx_error_check(wil, skb, stats))) {
771 dev_kfree_skb(skb);
772 return;
773 }
774
775 if (wdev->iftype == NL80211_IFTYPE_STATION) { 930 if (wdev->iftype == NL80211_IFTYPE_STATION) {
776 sa = wil_skb_get_sa(skb); 931 sa = wil_skb_get_sa(skb);
777 if (mcast && ether_addr_equal(sa, ndev->dev_addr)) { 932 if (mcast && ether_addr_equal(sa, ndev->dev_addr)) {
@@ -817,7 +972,14 @@ void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
817 if (skb) { /* deliver to local stack */ 972 if (skb) { /* deliver to local stack */
818 skb->protocol = eth_type_trans(skb, ndev); 973 skb->protocol = eth_type_trans(skb, ndev);
819 skb->dev = ndev; 974 skb->dev = ndev;
820 rc = napi_gro_receive(&wil->napi_rx, skb); 975
976 if (skb->protocol == cpu_to_be16(ETH_P_PAE))
977 wil_rx_handle_eapol(vif, skb);
978
979 if (gro)
980 rc = napi_gro_receive(&wil->napi_rx, skb);
981 else
982 netif_rx_ni(skb);
821 wil_dbg_txrx(wil, "Rx complete %d bytes => %s\n", 983 wil_dbg_txrx(wil, "Rx complete %d bytes => %s\n",
822 len, gro_res_str[rc]); 984 len, gro_res_str[rc]);
823 } 985 }
@@ -837,6 +999,36 @@ stats:
837 } 999 }
838} 1000}
839 1001
1002void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
1003{
1004 int cid, security;
1005 struct wil6210_priv *wil = ndev_to_wil(ndev);
1006 struct wil_net_stats *stats;
1007
1008 wil->txrx_ops.get_netif_rx_params(skb, &cid, &security);
1009
1010 stats = &wil->sta[cid].stats;
1011
1012 skb_orphan(skb);
1013
1014 if (security && (wil->txrx_ops.rx_crypto_check(wil, skb) != 0)) {
1015 dev_kfree_skb(skb);
1016 ndev->stats.rx_dropped++;
1017 stats->rx_replay++;
1018 stats->rx_dropped++;
1019 wil_dbg_txrx(wil, "Rx drop %d bytes\n", skb->len);
1020 return;
1021 }
1022
1023 /* check errors reported by HW and update statistics */
1024 if (unlikely(wil->txrx_ops.rx_error_check(wil, skb, stats))) {
1025 dev_kfree_skb(skb);
1026 return;
1027 }
1028
1029 wil_netif_rx(skb, ndev, cid, stats, true);
1030}
1031
840/** 1032/**
841 * Proceed all completed skb's from Rx VRING 1033 * Proceed all completed skb's from Rx VRING
842 * 1034 *
@@ -2320,6 +2512,10 @@ int wil_tx_complete(struct wil6210_vif *vif, int ringid)
2320 if (stats) 2512 if (stats)
2321 stats->tx_errors++; 2513 stats->tx_errors++;
2322 } 2514 }
2515
2516 if (skb->protocol == cpu_to_be16(ETH_P_PAE))
2517 wil_tx_complete_handle_eapol(vif, skb);
2518
2323 wil_consume_skb(skb, d->dma.error == 0); 2519 wil_consume_skb(skb, d->dma.error == 0);
2324 } 2520 }
2325 memset(ctx, 0, sizeof(*ctx)); 2521 memset(ctx, 0, sizeof(*ctx));
diff --git a/drivers/net/wireless/ath/wil6210/txrx.h b/drivers/net/wireless/ath/wil6210/txrx.h
index c0da1340c2d2..5120475b0cd7 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.h
+++ b/drivers/net/wireless/ath/wil6210/txrx.h
@@ -423,6 +423,46 @@ struct vring_rx_mac {
423#define RX_DMA_STATUS_PHY_INFO BIT(6) 423#define RX_DMA_STATUS_PHY_INFO BIT(6)
424#define RX_DMA_STATUS_FFM BIT(7) /* EtherType Flex Filter Match */ 424#define RX_DMA_STATUS_FFM BIT(7) /* EtherType Flex Filter Match */
425 425
426/* IEEE 802.11, 8.5.2 EAPOL-Key frames */
427#define WIL_KEY_INFO_KEY_TYPE BIT(3) /* val of 1 = Pairwise, 0 = Group key */
428
429#define WIL_KEY_INFO_MIC BIT(8)
430#define WIL_KEY_INFO_ENCR_KEY_DATA BIT(12) /* for rsn only */
431
432#define WIL_EAP_NONCE_LEN 32
433#define WIL_EAP_KEY_RSC_LEN 8
434#define WIL_EAP_REPLAY_COUNTER_LEN 8
435#define WIL_EAP_KEY_IV_LEN 16
436#define WIL_EAP_KEY_ID_LEN 8
437
438enum {
439 WIL_1X_TYPE_EAP_PACKET = 0,
440 WIL_1X_TYPE_EAPOL_START = 1,
441 WIL_1X_TYPE_EAPOL_LOGOFF = 2,
442 WIL_1X_TYPE_EAPOL_KEY = 3,
443};
444
445#define WIL_EAPOL_KEY_TYPE_RSN 2
446#define WIL_EAPOL_KEY_TYPE_WPA 254
447
448struct wil_1x_hdr {
449 u8 version;
450 u8 type;
451 __be16 length;
452 /* followed by data */
453} __packed;
454
455struct wil_eapol_key {
456 u8 type;
457 __be16 key_info;
458 __be16 key_length;
459 u8 replay_counter[WIL_EAP_REPLAY_COUNTER_LEN];
460 u8 key_nonce[WIL_EAP_NONCE_LEN];
461 u8 key_iv[WIL_EAP_KEY_IV_LEN];
462 u8 key_rsc[WIL_EAP_KEY_RSC_LEN];
463 u8 key_id[WIL_EAP_KEY_ID_LEN];
464} __packed;
465
426struct vring_rx_dma { 466struct vring_rx_dma {
427 u32 d0; 467 u32 d0;
428 struct wil_ring_dma_addr addr; 468 struct wil_ring_dma_addr addr;
@@ -646,6 +686,8 @@ static inline void wil_skb_set_cid(struct sk_buff *skb, u8 cid)
646} 686}
647 687
648void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev); 688void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev);
689void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
690 struct wil_net_stats *stats, bool gro);
649void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb); 691void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb);
650void wil_rx_bar(struct wil6210_priv *wil, struct wil6210_vif *vif, 692void wil_rx_bar(struct wil6210_priv *wil, struct wil6210_vif *vif,
651 u8 cid, u8 tid, u16 seq); 693 u8 cid, u8 tid, u16 seq);
diff --git a/drivers/net/wireless/ath/wil6210/txrx_edma.c b/drivers/net/wireless/ath/wil6210/txrx_edma.c
index 71b7ad4b6454..04d576deae72 100644
--- a/drivers/net/wireless/ath/wil6210/txrx_edma.c
+++ b/drivers/net/wireless/ath/wil6210/txrx_edma.c
@@ -221,10 +221,17 @@ static int wil_ring_alloc_skb_edma(struct wil6210_priv *wil,
221} 221}
222 222
223static inline 223static inline
224void wil_get_next_rx_status_msg(struct wil_status_ring *sring, void *msg) 224void wil_get_next_rx_status_msg(struct wil_status_ring *sring, u8 *dr_bit,
225 void *msg)
225{ 226{
226 memcpy(msg, (void *)(sring->va + (sring->elem_size * sring->swhead)), 227 struct wil_rx_status_compressed *_msg;
227 sring->elem_size); 228
229 _msg = (struct wil_rx_status_compressed *)
230 (sring->va + (sring->elem_size * sring->swhead));
231 *dr_bit = WIL_GET_BITS(_msg->d0, 31, 31);
232 /* make sure dr_bit is read before the rest of status msg */
233 rmb();
234 memcpy(msg, (void *)_msg, sring->elem_size);
228} 235}
229 236
230static inline void wil_sring_advance_swhead(struct wil_status_ring *sring) 237static inline void wil_sring_advance_swhead(struct wil_status_ring *sring)
@@ -587,8 +594,7 @@ static bool wil_is_rx_idle_edma(struct wil6210_priv *wil)
587 if (!sring->va) 594 if (!sring->va)
588 continue; 595 continue;
589 596
590 wil_get_next_rx_status_msg(sring, msg); 597 wil_get_next_rx_status_msg(sring, &dr_bit, msg);
591 dr_bit = wil_rx_status_get_desc_rdy_bit(msg);
592 598
593 /* Check if there are unhandled RX status messages */ 599 /* Check if there are unhandled RX status messages */
594 if (dr_bit == sring->desc_rdy_pol) 600 if (dr_bit == sring->desc_rdy_pol)
@@ -878,8 +884,7 @@ static struct sk_buff *wil_sring_reap_rx_edma(struct wil6210_priv *wil,
878 BUILD_BUG_ON(sizeof(struct wil_rx_status_extended) > sizeof(skb->cb)); 884 BUILD_BUG_ON(sizeof(struct wil_rx_status_extended) > sizeof(skb->cb));
879 885
880again: 886again:
881 wil_get_next_rx_status_msg(sring, msg); 887 wil_get_next_rx_status_msg(sring, &dr_bit, msg);
882 dr_bit = wil_rx_status_get_desc_rdy_bit(msg);
883 888
884 /* Completed handling all the ready status messages */ 889 /* Completed handling all the ready status messages */
885 if (dr_bit != sring->desc_rdy_pol) 890 if (dr_bit != sring->desc_rdy_pol)
@@ -959,8 +964,8 @@ again:
959 } 964 }
960 stats = &wil->sta[cid].stats; 965 stats = &wil->sta[cid].stats;
961 966
962 if (unlikely(skb->len < ETH_HLEN)) { 967 if (unlikely(dmalen < ETH_HLEN)) {
963 wil_dbg_txrx(wil, "Short frame, len = %d\n", skb->len); 968 wil_dbg_txrx(wil, "Short frame, len = %d\n", dmalen);
964 stats->rx_short_frame++; 969 stats->rx_short_frame++;
965 rxdata->skipping = true; 970 rxdata->skipping = true;
966 goto skipping; 971 goto skipping;
@@ -1023,6 +1028,8 @@ skipping:
1023 stats->last_mcs_rx = wil_rx_status_get_mcs(msg); 1028 stats->last_mcs_rx = wil_rx_status_get_mcs(msg);
1024 if (stats->last_mcs_rx < ARRAY_SIZE(stats->rx_per_mcs)) 1029 if (stats->last_mcs_rx < ARRAY_SIZE(stats->rx_per_mcs))
1025 stats->rx_per_mcs[stats->last_mcs_rx]++; 1030 stats->rx_per_mcs[stats->last_mcs_rx]++;
1031
1032 stats->last_cb_mode_rx = wil_rx_status_get_cb_mode(msg);
1026 } 1033 }
1027 1034
1028 if (!wil->use_rx_hw_reordering && !wil->use_compressed_rx_status && 1035 if (!wil->use_rx_hw_reordering && !wil->use_compressed_rx_status &&
@@ -1133,12 +1140,15 @@ static int wil_tx_desc_map_edma(union wil_tx_desc *desc,
1133} 1140}
1134 1141
1135static inline void 1142static inline void
1136wil_get_next_tx_status_msg(struct wil_status_ring *sring, 1143wil_get_next_tx_status_msg(struct wil_status_ring *sring, u8 *dr_bit,
1137 struct wil_ring_tx_status *msg) 1144 struct wil_ring_tx_status *msg)
1138{ 1145{
1139 struct wil_ring_tx_status *_msg = (struct wil_ring_tx_status *) 1146 struct wil_ring_tx_status *_msg = (struct wil_ring_tx_status *)
1140 (sring->va + (sring->elem_size * sring->swhead)); 1147 (sring->va + (sring->elem_size * sring->swhead));
1141 1148
1149 *dr_bit = _msg->desc_ready >> TX_STATUS_DESC_READY_POS;
1150 /* make sure dr_bit is read before the rest of status msg */
1151 rmb();
1142 *msg = *_msg; 1152 *msg = *_msg;
1143} 1153}
1144 1154
@@ -1167,8 +1177,7 @@ int wil_tx_sring_handler(struct wil6210_priv *wil,
1167 int used_before_complete; 1177 int used_before_complete;
1168 int used_new; 1178 int used_new;
1169 1179
1170 wil_get_next_tx_status_msg(sring, &msg); 1180 wil_get_next_tx_status_msg(sring, &dr_bit, &msg);
1171 dr_bit = msg.desc_ready >> TX_STATUS_DESC_READY_POS;
1172 1181
1173 /* Process completion messages while DR bit has the expected polarity */ 1182 /* Process completion messages while DR bit has the expected polarity */
1174 while (dr_bit == sring->desc_rdy_pol) { 1183 while (dr_bit == sring->desc_rdy_pol) {
@@ -1255,6 +1264,10 @@ int wil_tx_sring_handler(struct wil6210_priv *wil,
1255 if (stats) 1264 if (stats)
1256 stats->tx_errors++; 1265 stats->tx_errors++;
1257 } 1266 }
1267
1268 if (skb->protocol == cpu_to_be16(ETH_P_PAE))
1269 wil_tx_complete_handle_eapol(vif, skb);
1270
1258 wil_consume_skb(skb, msg.status == 0); 1271 wil_consume_skb(skb, msg.status == 0);
1259 } 1272 }
1260 memset(ctx, 0, sizeof(*ctx)); 1273 memset(ctx, 0, sizeof(*ctx));
@@ -1287,8 +1300,7 @@ again:
1287 1300
1288 wil_sring_advance_swhead(sring); 1301 wil_sring_advance_swhead(sring);
1289 1302
1290 wil_get_next_tx_status_msg(sring, &msg); 1303 wil_get_next_tx_status_msg(sring, &dr_bit, &msg);
1291 dr_bit = msg.desc_ready >> TX_STATUS_DESC_READY_POS;
1292 } 1304 }
1293 1305
1294 /* shall we wake net queues? */ 1306 /* shall we wake net queues? */
diff --git a/drivers/net/wireless/ath/wil6210/txrx_edma.h b/drivers/net/wireless/ath/wil6210/txrx_edma.h
index e9e6ea9b16b9..136c51c338cf 100644
--- a/drivers/net/wireless/ath/wil6210/txrx_edma.h
+++ b/drivers/net/wireless/ath/wil6210/txrx_edma.h
@@ -366,6 +366,12 @@ static inline u8 wil_rx_status_get_mcs(void *msg)
366 16, 21); 366 16, 21);
367} 367}
368 368
369static inline u8 wil_rx_status_get_cb_mode(void *msg)
370{
371 return WIL_GET_BITS(((struct wil_rx_status_compressed *)msg)->d1,
372 22, 23);
373}
374
369static inline u16 wil_rx_status_get_flow_id(void *msg) 375static inline u16 wil_rx_status_get_flow_id(void *msg)
370{ 376{
371 return WIL_GET_BITS(((struct wil_rx_status_compressed *)msg)->d0, 377 return WIL_GET_BITS(((struct wil_rx_status_compressed *)msg)->d0,
@@ -415,12 +421,6 @@ static inline u8 wil_rx_status_get_tid(void *msg)
415 return val & WIL_RX_EDMA_DLPF_LU_MISS_CID_TID_MASK; 421 return val & WIL_RX_EDMA_DLPF_LU_MISS_CID_TID_MASK;
416} 422}
417 423
418static inline int wil_rx_status_get_desc_rdy_bit(void *msg)
419{
420 return WIL_GET_BITS(((struct wil_rx_status_compressed *)msg)->d0,
421 31, 31);
422}
423
424static inline int wil_rx_status_get_eop(void *msg) /* EoP = End of Packet */ 424static inline int wil_rx_status_get_eop(void *msg) /* EoP = End of Packet */
425{ 425{
426 return WIL_GET_BITS(((struct wil_rx_status_compressed *)msg)->d0, 426 return WIL_GET_BITS(((struct wil_rx_status_compressed *)msg)->d0,
diff --git a/drivers/net/wireless/ath/wil6210/wil6210.h b/drivers/net/wireless/ath/wil6210/wil6210.h
index 6f456b311a39..0783c7963621 100644
--- a/drivers/net/wireless/ath/wil6210/wil6210.h
+++ b/drivers/net/wireless/ath/wil6210/wil6210.h
@@ -590,6 +590,7 @@ struct wil_net_stats {
590 unsigned long rx_amsdu_error; /* eDMA specific */ 590 unsigned long rx_amsdu_error; /* eDMA specific */
591 unsigned long rx_csum_err; 591 unsigned long rx_csum_err;
592 u16 last_mcs_rx; 592 u16 last_mcs_rx;
593 u8 last_cb_mode_rx;
593 u64 rx_per_mcs[WIL_MCS_MAX + 1]; 594 u64 rx_per_mcs[WIL_MCS_MAX + 1];
594 u32 ft_roams; /* relevant in STA mode */ 595 u32 ft_roams; /* relevant in STA mode */
595}; 596};
@@ -730,6 +731,12 @@ enum wil_sta_status {
730 wil_sta_connected = 2, 731 wil_sta_connected = 2,
731}; 732};
732 733
734enum wil_rekey_state {
735 WIL_REKEY_IDLE = 0,
736 WIL_REKEY_M3_RECEIVED = 1,
737 WIL_REKEY_WAIT_M4_SENT = 2,
738};
739
733/** 740/**
734 * struct wil_sta_info - data for peer 741 * struct wil_sta_info - data for peer
735 * 742 *
@@ -850,6 +857,7 @@ struct wil6210_vif {
850 DECLARE_BITMAP(status, wil_vif_status_last); 857 DECLARE_BITMAP(status, wil_vif_status_last);
851 u32 privacy; /* secure connection? */ 858 u32 privacy; /* secure connection? */
852 u16 channel; /* relevant in AP mode */ 859 u16 channel; /* relevant in AP mode */
860 u8 wmi_edmg_channel; /* relevant in AP mode */
853 u8 hidden_ssid; /* relevant in AP mode */ 861 u8 hidden_ssid; /* relevant in AP mode */
854 u32 ap_isolate; /* no intra-BSS communication */ 862 u32 ap_isolate; /* no intra-BSS communication */
855 bool pbss; 863 bool pbss;
@@ -877,6 +885,10 @@ struct wil6210_vif {
877 int net_queue_stopped; /* netif_tx_stop_all_queues invoked */ 885 int net_queue_stopped; /* netif_tx_stop_all_queues invoked */
878 bool fw_stats_ready; /* per-cid statistics are ready inside sta_info */ 886 bool fw_stats_ready; /* per-cid statistics are ready inside sta_info */
879 u64 fw_stats_tsf; /* measurement timestamp */ 887 u64 fw_stats_tsf; /* measurement timestamp */
888
889 /* PTK rekey race prevention, this is relevant to station mode only */
890 enum wil_rekey_state ptk_rekey_state;
891 struct work_struct enable_tx_key_worker;
880}; 892};
881 893
882/** 894/**
@@ -977,6 +989,7 @@ struct wil6210_priv {
977 */ 989 */
978 spinlock_t wmi_ev_lock; 990 spinlock_t wmi_ev_lock;
979 spinlock_t net_queue_lock; /* guarding stop/wake netif queue */ 991 spinlock_t net_queue_lock; /* guarding stop/wake netif queue */
992 spinlock_t eap_lock; /* guarding access to eap rekey fields */
980 struct napi_struct napi_rx; 993 struct napi_struct napi_rx;
981 struct napi_struct napi_tx; 994 struct napi_struct napi_tx;
982 struct net_device napi_ndev; /* dummy net_device serving all VIFs */ 995 struct net_device napi_ndev; /* dummy net_device serving all VIFs */
@@ -1144,7 +1157,7 @@ static inline void wil_c(struct wil6210_priv *wil, u32 reg, u32 val)
1144/** 1157/**
1145 * wil_cid_valid - check cid is valid 1158 * wil_cid_valid - check cid is valid
1146 */ 1159 */
1147static inline bool wil_cid_valid(struct wil6210_priv *wil, u8 cid) 1160static inline bool wil_cid_valid(struct wil6210_priv *wil, int cid)
1148{ 1161{
1149 return (cid >= 0 && cid < wil->max_assoc_sta); 1162 return (cid >= 0 && cid < wil->max_assoc_sta);
1150} 1163}
@@ -1224,6 +1237,7 @@ int __wil_down(struct wil6210_priv *wil);
1224void wil_refresh_fw_capabilities(struct wil6210_priv *wil); 1237void wil_refresh_fw_capabilities(struct wil6210_priv *wil);
1225void wil_mbox_ring_le2cpus(struct wil6210_mbox_ring *r); 1238void wil_mbox_ring_le2cpus(struct wil6210_mbox_ring *r);
1226int wil_find_cid(struct wil6210_priv *wil, u8 mid, const u8 *mac); 1239int wil_find_cid(struct wil6210_priv *wil, u8 mid, const u8 *mac);
1240int wil_find_cid_by_idx(struct wil6210_priv *wil, u8 mid, int idx);
1227void wil_set_ethtoolops(struct net_device *ndev); 1241void wil_set_ethtoolops(struct net_device *ndev);
1228 1242
1229struct fw_map *wil_find_fw_mapping(const char *section); 1243struct fw_map *wil_find_fw_mapping(const char *section);
@@ -1335,7 +1349,7 @@ void wil_p2p_wdev_free(struct wil6210_priv *wil);
1335 1349
1336int wmi_set_mac_address(struct wil6210_priv *wil, void *addr); 1350int wmi_set_mac_address(struct wil6210_priv *wil, void *addr);
1337int wmi_pcp_start(struct wil6210_vif *vif, int bi, u8 wmi_nettype, u8 chan, 1351int wmi_pcp_start(struct wil6210_vif *vif, int bi, u8 wmi_nettype, u8 chan,
1338 u8 hidden_ssid, u8 is_go); 1352 u8 edmg_chan, u8 hidden_ssid, u8 is_go);
1339int wmi_pcp_stop(struct wil6210_vif *vif); 1353int wmi_pcp_stop(struct wil6210_vif *vif);
1340int wmi_led_cfg(struct wil6210_priv *wil, bool enable); 1354int wmi_led_cfg(struct wil6210_priv *wil, bool enable);
1341int wmi_abort_scan(struct wil6210_vif *vif); 1355int wmi_abort_scan(struct wil6210_vif *vif);
@@ -1349,6 +1363,7 @@ void wil6210_disconnect_complete(struct wil6210_vif *vif, const u8 *bssid,
1349void wil_probe_client_flush(struct wil6210_vif *vif); 1363void wil_probe_client_flush(struct wil6210_vif *vif);
1350void wil_probe_client_worker(struct work_struct *work); 1364void wil_probe_client_worker(struct work_struct *work);
1351void wil_disconnect_worker(struct work_struct *work); 1365void wil_disconnect_worker(struct work_struct *work);
1366void wil_enable_tx_key_worker(struct work_struct *work);
1352 1367
1353void wil_init_txrx_ops(struct wil6210_priv *wil); 1368void wil_init_txrx_ops(struct wil6210_priv *wil);
1354 1369
@@ -1365,6 +1380,8 @@ void wil_update_net_queues_bh(struct wil6210_priv *wil, struct wil6210_vif *vif,
1365 struct wil_ring *ring, bool check_stop); 1380 struct wil_ring *ring, bool check_stop);
1366netdev_tx_t wil_start_xmit(struct sk_buff *skb, struct net_device *ndev); 1381netdev_tx_t wil_start_xmit(struct sk_buff *skb, struct net_device *ndev);
1367int wil_tx_complete(struct wil6210_vif *vif, int ringid); 1382int wil_tx_complete(struct wil6210_vif *vif, int ringid);
1383void wil_tx_complete_handle_eapol(struct wil6210_vif *vif,
1384 struct sk_buff *skb);
1368void wil6210_unmask_irq_tx(struct wil6210_priv *wil); 1385void wil6210_unmask_irq_tx(struct wil6210_priv *wil);
1369void wil6210_unmask_irq_tx_edma(struct wil6210_priv *wil); 1386void wil6210_unmask_irq_tx_edma(struct wil6210_priv *wil);
1370 1387
@@ -1412,6 +1429,10 @@ int wmi_mgmt_tx_ext(struct wil6210_vif *vif, const u8 *buf, size_t len,
1412 u8 channel, u16 duration_ms); 1429 u8 channel, u16 duration_ms);
1413int wmi_rbufcap_cfg(struct wil6210_priv *wil, bool enable, u16 threshold); 1430int wmi_rbufcap_cfg(struct wil6210_priv *wil, bool enable, u16 threshold);
1414 1431
1432int wil_wmi2spec_ch(u8 wmi_ch, u8 *spec_ch);
1433int wil_spec2wmi_ch(u8 spec_ch, u8 *wmi_ch);
1434void wil_update_supported_bands(struct wil6210_priv *wil);
1435
1415int reverse_memcmp(const void *cs, const void *ct, size_t count); 1436int reverse_memcmp(const void *cs, const void *ct, size_t count);
1416 1437
1417/* WMI for enhanced DMA */ 1438/* WMI for enhanced DMA */
diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
index 475b1a233cc9..153b84447e40 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.c
+++ b/drivers/net/wireless/ath/wil6210/wmi.c
@@ -878,6 +878,12 @@ static void wmi_evt_rx_mgmt(struct wil6210_vif *vif, int id, void *d, int len)
878 878
879 if (ieee80211_is_beacon(fc) || ieee80211_is_probe_resp(fc)) { 879 if (ieee80211_is_beacon(fc) || ieee80211_is_probe_resp(fc)) {
880 struct cfg80211_bss *bss; 880 struct cfg80211_bss *bss;
881 struct cfg80211_inform_bss bss_data = {
882 .chan = channel,
883 .scan_width = NL80211_BSS_CHAN_WIDTH_20,
884 .signal = signal,
885 .boottime_ns = ktime_to_ns(ktime_get_boottime()),
886 };
881 u64 tsf = le64_to_cpu(rx_mgmt_frame->u.beacon.timestamp); 887 u64 tsf = le64_to_cpu(rx_mgmt_frame->u.beacon.timestamp);
882 u16 cap = le16_to_cpu(rx_mgmt_frame->u.beacon.capab_info); 888 u16 cap = le16_to_cpu(rx_mgmt_frame->u.beacon.capab_info);
883 u16 bi = le16_to_cpu(rx_mgmt_frame->u.beacon.beacon_int); 889 u16 bi = le16_to_cpu(rx_mgmt_frame->u.beacon.beacon_int);
@@ -892,8 +898,9 @@ static void wmi_evt_rx_mgmt(struct wil6210_vif *vif, int id, void *d, int len)
892 898
893 wil_dbg_wmi(wil, "Capability info : 0x%04x\n", cap); 899 wil_dbg_wmi(wil, "Capability info : 0x%04x\n", cap);
894 900
895 bss = cfg80211_inform_bss_frame(wiphy, channel, rx_mgmt_frame, 901 bss = cfg80211_inform_bss_frame_data(wiphy, &bss_data,
896 d_len, signal, GFP_KERNEL); 902 rx_mgmt_frame,
903 d_len, GFP_KERNEL);
897 if (bss) { 904 if (bss) {
898 wil_dbg_wmi(wil, "Added BSS %pM\n", 905 wil_dbg_wmi(wil, "Added BSS %pM\n",
899 rx_mgmt_frame->bssid); 906 rx_mgmt_frame->bssid);
@@ -1332,6 +1339,12 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock)
1332 cid = evt->cid; 1339 cid = evt->cid;
1333 tid = evt->tid; 1340 tid = evt->tid;
1334 } 1341 }
1342
1343 if (!wil_cid_valid(wil, cid)) {
1344 wil_err(wil, "DELBA: Invalid CID %d\n", cid);
1345 return;
1346 }
1347
1335 wil_dbg_wmi(wil, "DELBA MID %d CID %d TID %d from %s reason %d\n", 1348 wil_dbg_wmi(wil, "DELBA MID %d CID %d TID %d from %s reason %d\n",
1336 vif->mid, cid, tid, 1349 vif->mid, cid, tid,
1337 evt->from_initiator ? "originator" : "recipient", 1350 evt->from_initiator ? "originator" : "recipient",
@@ -1385,6 +1398,10 @@ wmi_evt_sched_scan_result(struct wil6210_vif *vif, int id, void *d, int len)
1385 __le16 fc; 1398 __le16 fc;
1386 u32 d_len; 1399 u32 d_len;
1387 struct cfg80211_bss *bss; 1400 struct cfg80211_bss *bss;
1401 struct cfg80211_inform_bss bss_data = {
1402 .scan_width = NL80211_BSS_CHAN_WIDTH_20,
1403 .boottime_ns = ktime_to_ns(ktime_get_boottime()),
1404 };
1388 1405
1389 if (flen < 0) { 1406 if (flen < 0) {
1390 wil_err(wil, "sched scan result event too short, len %d\n", 1407 wil_err(wil, "sched scan result event too short, len %d\n",
@@ -1427,8 +1444,10 @@ wmi_evt_sched_scan_result(struct wil6210_vif *vif, int id, void *d, int len)
1427 return; 1444 return;
1428 } 1445 }
1429 1446
1430 bss = cfg80211_inform_bss_frame(wiphy, channel, rx_mgmt_frame, 1447 bss_data.signal = signal;
1431 d_len, signal, GFP_KERNEL); 1448 bss_data.chan = channel;
1449 bss = cfg80211_inform_bss_frame_data(wiphy, &bss_data, rx_mgmt_frame,
1450 d_len, GFP_KERNEL);
1432 if (bss) { 1451 if (bss) {
1433 wil_dbg_wmi(wil, "Added BSS %pM\n", rx_mgmt_frame->bssid); 1452 wil_dbg_wmi(wil, "Added BSS %pM\n", rx_mgmt_frame->bssid);
1434 cfg80211_put_bss(wiphy, bss); 1453 cfg80211_put_bss(wiphy, bss);
@@ -2163,8 +2182,8 @@ int wmi_rbufcap_cfg(struct wil6210_priv *wil, bool enable, u16 threshold)
2163 return rc; 2182 return rc;
2164} 2183}
2165 2184
2166int wmi_pcp_start(struct wil6210_vif *vif, 2185int wmi_pcp_start(struct wil6210_vif *vif, int bi, u8 wmi_nettype,
2167 int bi, u8 wmi_nettype, u8 chan, u8 hidden_ssid, u8 is_go) 2186 u8 chan, u8 wmi_edmg_chan, u8 hidden_ssid, u8 is_go)
2168{ 2187{
2169 struct wil6210_priv *wil = vif_to_wil(vif); 2188 struct wil6210_priv *wil = vif_to_wil(vif);
2170 int rc; 2189 int rc;
@@ -2174,6 +2193,7 @@ int wmi_pcp_start(struct wil6210_vif *vif,
2174 .network_type = wmi_nettype, 2193 .network_type = wmi_nettype,
2175 .disable_sec_offload = 1, 2194 .disable_sec_offload = 1,
2176 .channel = chan - 1, 2195 .channel = chan - 1,
2196 .edmg_channel = wmi_edmg_chan,
2177 .pcp_max_assoc_sta = wil->max_assoc_sta, 2197 .pcp_max_assoc_sta = wil->max_assoc_sta,
2178 .hidden_ssid = hidden_ssid, 2198 .hidden_ssid = hidden_ssid,
2179 .is_go = is_go, 2199 .is_go = is_go,
@@ -2437,10 +2457,17 @@ int wmi_add_cipher_key(struct wil6210_vif *vif, u8 key_index,
2437 .key_len = key_len, 2457 .key_len = key_len,
2438 }; 2458 };
2439 2459
2440 if (!key || (key_len > sizeof(cmd.key))) 2460 if (key_len > sizeof(cmd.key))
2441 return -EINVAL; 2461 return -EINVAL;
2442 2462
2443 memcpy(cmd.key, key, key_len); 2463 /* key len = 0 is allowed only for usage of WMI_KEY_USE_APPLY */
2464 if ((key_len == 0 || !key) &&
2465 key_usage != WMI_KEY_USE_APPLY_PTK)
2466 return -EINVAL;
2467
2468 if (key)
2469 memcpy(cmd.key, key, key_len);
2470
2444 if (mac_addr) 2471 if (mac_addr)
2445 memcpy(cmd.mac, mac_addr, WMI_MAC_LEN); 2472 memcpy(cmd.mac, mac_addr, WMI_MAC_LEN);
2446 2473
diff --git a/drivers/net/wireless/ath/wil6210/wmi.h b/drivers/net/wireless/ath/wil6210/wmi.h
index 3e37229b36b5..a2f7034489ae 100644
--- a/drivers/net/wireless/ath/wil6210/wmi.h
+++ b/drivers/net/wireless/ath/wil6210/wmi.h
@@ -97,6 +97,7 @@ enum wmi_fw_capability {
97 WMI_FW_CAPABILITY_SET_SILENT_RSSI_TABLE = 13, 97 WMI_FW_CAPABILITY_SET_SILENT_RSSI_TABLE = 13,
98 WMI_FW_CAPABILITY_LO_POWER_CALIB_FROM_OTP = 14, 98 WMI_FW_CAPABILITY_LO_POWER_CALIB_FROM_OTP = 14,
99 WMI_FW_CAPABILITY_PNO = 15, 99 WMI_FW_CAPABILITY_PNO = 15,
100 WMI_FW_CAPABILITY_CHANNEL_BONDING = 17,
100 WMI_FW_CAPABILITY_REF_CLOCK_CONTROL = 18, 101 WMI_FW_CAPABILITY_REF_CLOCK_CONTROL = 18,
101 WMI_FW_CAPABILITY_AP_SME_OFFLOAD_NONE = 19, 102 WMI_FW_CAPABILITY_AP_SME_OFFLOAD_NONE = 19,
102 WMI_FW_CAPABILITY_MULTI_VIFS = 20, 103 WMI_FW_CAPABILITY_MULTI_VIFS = 20,
@@ -108,6 +109,7 @@ enum wmi_fw_capability {
108 WMI_FW_CAPABILITY_CHANNEL_4 = 26, 109 WMI_FW_CAPABILITY_CHANNEL_4 = 26,
109 WMI_FW_CAPABILITY_IPA = 27, 110 WMI_FW_CAPABILITY_IPA = 27,
110 WMI_FW_CAPABILITY_TEMPERATURE_ALL_RF = 30, 111 WMI_FW_CAPABILITY_TEMPERATURE_ALL_RF = 30,
112 WMI_FW_CAPABILITY_SPLIT_REKEY = 31,
111 WMI_FW_CAPABILITY_MAX, 113 WMI_FW_CAPABILITY_MAX,
112}; 114};
113 115
@@ -361,6 +363,19 @@ enum wmi_connect_ctrl_flag_bits {
361 363
362#define WMI_MAX_SSID_LEN (32) 364#define WMI_MAX_SSID_LEN (32)
363 365
366enum wmi_channel {
367 WMI_CHANNEL_1 = 0x00,
368 WMI_CHANNEL_2 = 0x01,
369 WMI_CHANNEL_3 = 0x02,
370 WMI_CHANNEL_4 = 0x03,
371 WMI_CHANNEL_5 = 0x04,
372 WMI_CHANNEL_6 = 0x05,
373 WMI_CHANNEL_9 = 0x06,
374 WMI_CHANNEL_10 = 0x07,
375 WMI_CHANNEL_11 = 0x08,
376 WMI_CHANNEL_12 = 0x09,
377};
378
364/* WMI_CONNECT_CMDID */ 379/* WMI_CONNECT_CMDID */
365struct wmi_connect_cmd { 380struct wmi_connect_cmd {
366 u8 network_type; 381 u8 network_type;
@@ -372,8 +387,12 @@ struct wmi_connect_cmd {
372 u8 group_crypto_len; 387 u8 group_crypto_len;
373 u8 ssid_len; 388 u8 ssid_len;
374 u8 ssid[WMI_MAX_SSID_LEN]; 389 u8 ssid[WMI_MAX_SSID_LEN];
390 /* enum wmi_channel WMI_CHANNEL_1..WMI_CHANNEL_6; for EDMG this is
391 * the primary channel number
392 */
375 u8 channel; 393 u8 channel;
376 u8 reserved0; 394 /* enum wmi_channel WMI_CHANNEL_9..WMI_CHANNEL_12 */
395 u8 edmg_channel;
377 u8 bssid[WMI_MAC_LEN]; 396 u8 bssid[WMI_MAC_LEN];
378 __le32 ctrl_flags; 397 __le32 ctrl_flags;
379 u8 dst_mac[WMI_MAC_LEN]; 398 u8 dst_mac[WMI_MAC_LEN];
@@ -403,6 +422,8 @@ enum wmi_key_usage {
403 WMI_KEY_USE_PAIRWISE = 0x00, 422 WMI_KEY_USE_PAIRWISE = 0x00,
404 WMI_KEY_USE_RX_GROUP = 0x01, 423 WMI_KEY_USE_RX_GROUP = 0x01,
405 WMI_KEY_USE_TX_GROUP = 0x02, 424 WMI_KEY_USE_TX_GROUP = 0x02,
425 WMI_KEY_USE_STORE_PTK = 0x03,
426 WMI_KEY_USE_APPLY_PTK = 0x04,
406}; 427};
407 428
408struct wmi_add_cipher_key_cmd { 429struct wmi_add_cipher_key_cmd {
@@ -2312,8 +2333,12 @@ struct wmi_notify_req_done_event {
2312 2333
2313/* WMI_CONNECT_EVENTID */ 2334/* WMI_CONNECT_EVENTID */
2314struct wmi_connect_event { 2335struct wmi_connect_event {
2336 /* enum wmi_channel WMI_CHANNEL_1..WMI_CHANNEL_6; for EDMG this is
2337 * the primary channel number
2338 */
2315 u8 channel; 2339 u8 channel;
2316 u8 reserved0; 2340 /* enum wmi_channel WMI_CHANNEL_9..WMI_CHANNEL_12 */
2341 u8 edmg_channel;
2317 u8 bssid[WMI_MAC_LEN]; 2342 u8 bssid[WMI_MAC_LEN];
2318 __le16 listen_interval; 2343 __le16 listen_interval;
2319 __le16 beacon_interval; 2344 __le16 beacon_interval;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
index 0988a166a785..623c0168da79 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
@@ -253,10 +253,12 @@ void brcmf_rx_frame(struct device *dev, struct sk_buff *rxp, bool handle_event);
253/* Receive async event packet from firmware. Callee disposes of rxp. */ 253/* Receive async event packet from firmware. Callee disposes of rxp. */
254void brcmf_rx_event(struct device *dev, struct sk_buff *rxp); 254void brcmf_rx_event(struct device *dev, struct sk_buff *rxp);
255 255
256int brcmf_alloc(struct device *dev, struct brcmf_mp_device *settings);
256/* Indication from bus module regarding presence/insertion of dongle. */ 257/* Indication from bus module regarding presence/insertion of dongle. */
257int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings); 258int brcmf_attach(struct device *dev);
258/* Indication from bus module regarding removal/absence of dongle */ 259/* Indication from bus module regarding removal/absence of dongle */
259void brcmf_detach(struct device *dev); 260void brcmf_detach(struct device *dev);
261void brcmf_free(struct device *dev);
260/* Indication from bus module that dongle should be reset */ 262/* Indication from bus module that dongle should be reset */
261void brcmf_dev_reset(struct device *dev); 263void brcmf_dev_reset(struct device *dev);
262/* Request from bus module to initiate a coredump */ 264/* Request from bus module to initiate a coredump */
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index dd6303f5f72e..e3ebb7abbdae 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -7202,7 +7202,6 @@ void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg)
7202 brcmf_pno_detach(cfg); 7202 brcmf_pno_detach(cfg);
7203 brcmf_btcoex_detach(cfg); 7203 brcmf_btcoex_detach(cfg);
7204 wiphy_unregister(cfg->wiphy); 7204 wiphy_unregister(cfg->wiphy);
7205 kfree(cfg->ops);
7206 wl_deinit_priv(cfg); 7205 wl_deinit_priv(cfg);
7207 brcmf_free_wiphy(cfg->wiphy); 7206 brcmf_free_wiphy(cfg->wiphy);
7208 kfree(cfg); 7207 kfree(cfg);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
index b7b50b07f776..14d5bbad1db1 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
@@ -292,7 +292,6 @@ struct brcmf_cfg80211_wowl {
292 */ 292 */
293struct brcmf_cfg80211_info { 293struct brcmf_cfg80211_info {
294 struct wiphy *wiphy; 294 struct wiphy *wiphy;
295 struct cfg80211_ops *ops;
296 struct brcmf_cfg80211_conf *conf; 295 struct brcmf_cfg80211_conf *conf;
297 struct brcmf_p2p_info p2p; 296 struct brcmf_p2p_info p2p;
298 struct brcmf_btcoex_info *btcoex; 297 struct brcmf_btcoex_info *btcoex;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index 21e07d1ceeae..406b367c284c 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -1209,13 +1209,11 @@ fail:
1209 return ret; 1209 return ret;
1210} 1210}
1211 1211
1212int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings) 1212int brcmf_alloc(struct device *dev, struct brcmf_mp_device *settings)
1213{ 1213{
1214 struct wiphy *wiphy; 1214 struct wiphy *wiphy;
1215 struct cfg80211_ops *ops; 1215 struct cfg80211_ops *ops;
1216 struct brcmf_pub *drvr = NULL; 1216 struct brcmf_pub *drvr = NULL;
1217 int ret = 0;
1218 int i;
1219 1217
1220 brcmf_dbg(TRACE, "Enter\n"); 1218 brcmf_dbg(TRACE, "Enter\n");
1221 1219
@@ -1224,12 +1222,30 @@ int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
1224 return -ENOMEM; 1222 return -ENOMEM;
1225 1223
1226 wiphy = wiphy_new(ops, sizeof(*drvr)); 1224 wiphy = wiphy_new(ops, sizeof(*drvr));
1227 if (!wiphy) 1225 if (!wiphy) {
1226 kfree(ops);
1228 return -ENOMEM; 1227 return -ENOMEM;
1228 }
1229 1229
1230 set_wiphy_dev(wiphy, dev); 1230 set_wiphy_dev(wiphy, dev);
1231 drvr = wiphy_priv(wiphy); 1231 drvr = wiphy_priv(wiphy);
1232 drvr->wiphy = wiphy; 1232 drvr->wiphy = wiphy;
1233 drvr->ops = ops;
1234 drvr->bus_if = dev_get_drvdata(dev);
1235 drvr->bus_if->drvr = drvr;
1236 drvr->settings = settings;
1237
1238 return 0;
1239}
1240
1241int brcmf_attach(struct device *dev)
1242{
1243 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
1244 struct brcmf_pub *drvr = bus_if->drvr;
1245 int ret = 0;
1246 int i;
1247
1248 brcmf_dbg(TRACE, "Enter\n");
1233 1249
1234 for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++) 1250 for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
1235 drvr->if2bss[i] = BRCMF_BSSIDX_INVALID; 1251 drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
@@ -1238,9 +1254,6 @@ int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
1238 1254
1239 /* Link to bus module */ 1255 /* Link to bus module */
1240 drvr->hdrlen = 0; 1256 drvr->hdrlen = 0;
1241 drvr->bus_if = dev_get_drvdata(dev);
1242 drvr->bus_if->drvr = drvr;
1243 drvr->settings = settings;
1244 1257
1245 /* Attach and link in the protocol */ 1258 /* Attach and link in the protocol */
1246 ret = brcmf_proto_attach(drvr); 1259 ret = brcmf_proto_attach(drvr);
@@ -1256,18 +1269,16 @@ int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
1256 /* attach firmware event handler */ 1269 /* attach firmware event handler */
1257 brcmf_fweh_attach(drvr); 1270 brcmf_fweh_attach(drvr);
1258 1271
1259 ret = brcmf_bus_started(drvr, ops); 1272 ret = brcmf_bus_started(drvr, drvr->ops);
1260 if (ret != 0) { 1273 if (ret != 0) {
1261 bphy_err(drvr, "dongle is not responding: err=%d\n", ret); 1274 bphy_err(drvr, "dongle is not responding: err=%d\n", ret);
1262 goto fail; 1275 goto fail;
1263 } 1276 }
1264 1277
1265 drvr->config->ops = ops;
1266 return 0; 1278 return 0;
1267 1279
1268fail: 1280fail:
1269 brcmf_detach(dev); 1281 brcmf_detach(dev);
1270 kfree(ops);
1271 1282
1272 return ret; 1283 return ret;
1273} 1284}
@@ -1350,9 +1361,20 @@ void brcmf_detach(struct device *dev)
1350 brcmf_cfg80211_detach(drvr->config); 1361 brcmf_cfg80211_detach(drvr->config);
1351 drvr->config = NULL; 1362 drvr->config = NULL;
1352 } 1363 }
1364}
1365
1366void brcmf_free(struct device *dev)
1367{
1368 struct brcmf_bus *bus_if = dev_get_drvdata(dev);
1369 struct brcmf_pub *drvr = bus_if->drvr;
1370
1371 if (!drvr)
1372 return;
1353 1373
1354 bus_if->drvr = NULL; 1374 bus_if->drvr = NULL;
1355 1375
1376 kfree(drvr->ops);
1377
1356 wiphy_free(drvr->wiphy); 1378 wiphy_free(drvr->wiphy);
1357} 1379}
1358 1380
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
index 86517a3d74b1..6699637d3bf8 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
@@ -97,6 +97,7 @@ struct brcmf_pub {
97 struct brcmf_bus *bus_if; 97 struct brcmf_bus *bus_if;
98 struct brcmf_proto *proto; 98 struct brcmf_proto *proto;
99 struct wiphy *wiphy; 99 struct wiphy *wiphy;
100 struct cfg80211_ops *ops;
100 struct brcmf_cfg80211_info *config; 101 struct brcmf_cfg80211_info *config;
101 102
102 /* Internal brcmf items */ 103 /* Internal brcmf items */
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
index 7ac945369762..6c463475e90b 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
@@ -1824,11 +1824,15 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
1824 1824
1825 brcmf_pcie_intr_enable(devinfo); 1825 brcmf_pcie_intr_enable(devinfo);
1826 brcmf_pcie_hostready(devinfo); 1826 brcmf_pcie_hostready(devinfo);
1827 if (brcmf_attach(&devinfo->pdev->dev, devinfo->settings) == 0) 1827
1828 return; 1828 ret = brcmf_attach(&devinfo->pdev->dev);
1829 if (ret)
1830 goto fail;
1829 1831
1830 brcmf_pcie_bus_console_read(devinfo, false); 1832 brcmf_pcie_bus_console_read(devinfo, false);
1831 1833
1834 return;
1835
1832fail: 1836fail:
1833 device_release_driver(dev); 1837 device_release_driver(dev);
1834} 1838}
@@ -1923,6 +1927,10 @@ brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1923 bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot); 1927 bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot);
1924 dev_set_drvdata(&pdev->dev, bus); 1928 dev_set_drvdata(&pdev->dev, bus);
1925 1929
1930 ret = brcmf_alloc(&devinfo->pdev->dev, devinfo->settings);
1931 if (ret)
1932 goto fail_bus;
1933
1926 fwreq = brcmf_pcie_prepare_fw_request(devinfo); 1934 fwreq = brcmf_pcie_prepare_fw_request(devinfo);
1927 if (!fwreq) { 1935 if (!fwreq) {
1928 ret = -ENOMEM; 1936 ret = -ENOMEM;
@@ -1971,6 +1979,7 @@ brcmf_pcie_remove(struct pci_dev *pdev)
1971 brcmf_pcie_intr_disable(devinfo); 1979 brcmf_pcie_intr_disable(devinfo);
1972 1980
1973 brcmf_detach(&pdev->dev); 1981 brcmf_detach(&pdev->dev);
1982 brcmf_free(&pdev->dev);
1974 1983
1975 kfree(bus->bus_priv.pcie); 1984 kfree(bus->bus_priv.pcie);
1976 kfree(bus->msgbuf->flowrings); 1985 kfree(bus->msgbuf->flowrings);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 629140b6d7e2..264ad63232f8 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -4247,17 +4247,26 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
4247 sdiod->bus_if->chip = bus->ci->chip; 4247 sdiod->bus_if->chip = bus->ci->chip;
4248 sdiod->bus_if->chiprev = bus->ci->chiprev; 4248 sdiod->bus_if->chiprev = bus->ci->chiprev;
4249 4249
4250 err = brcmf_alloc(sdiod->dev, sdiod->settings);
4251 if (err) {
4252 brcmf_err("brcmf_alloc failed\n");
4253 goto claim;
4254 }
4255
4250 /* Attach to the common layer, reserve hdr space */ 4256 /* Attach to the common layer, reserve hdr space */
4251 err = brcmf_attach(sdiod->dev, sdiod->settings); 4257 err = brcmf_attach(sdiod->dev);
4252 if (err != 0) { 4258 if (err != 0) {
4253 brcmf_err("brcmf_attach failed\n"); 4259 brcmf_err("brcmf_attach failed\n");
4254 sdio_claim_host(sdiod->func1); 4260 goto free;
4255 goto checkdied;
4256 } 4261 }
4257 4262
4258 /* ready */ 4263 /* ready */
4259 return; 4264 return;
4260 4265
4266free:
4267 brcmf_free(sdiod->dev);
4268claim:
4269 sdio_claim_host(sdiod->func1);
4261checkdied: 4270checkdied:
4262 brcmf_sdio_checkdied(bus); 4271 brcmf_sdio_checkdied(bus);
4263release: 4272release:
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
index d33628b79a3a..06f3c01f10b3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
@@ -1178,8 +1178,12 @@ static void brcmf_usb_probe_phase2(struct device *dev, int ret,
1178 if (ret) 1178 if (ret)
1179 goto error; 1179 goto error;
1180 1180
1181 ret = brcmf_alloc(devinfo->dev, devinfo->settings);
1182 if (ret)
1183 goto error;
1184
1181 /* Attach to the common driver interface */ 1185 /* Attach to the common driver interface */
1182 ret = brcmf_attach(devinfo->dev, devinfo->settings); 1186 ret = brcmf_attach(devinfo->dev);
1183 if (ret) 1187 if (ret)
1184 goto error; 1188 goto error;
1185 1189
@@ -1251,7 +1255,10 @@ static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo)
1251 } 1255 }
1252 1256
1253 if (!brcmf_usb_dlneeded(devinfo)) { 1257 if (!brcmf_usb_dlneeded(devinfo)) {
1254 ret = brcmf_attach(devinfo->dev, devinfo->settings); 1258 ret = brcmf_alloc(devinfo->dev, devinfo->settings);
1259 if (ret)
1260 goto fail;
1261 ret = brcmf_attach(devinfo->dev);
1255 if (ret) 1262 if (ret)
1256 goto fail; 1263 goto fail;
1257 /* we are done */ 1264 /* we are done */
@@ -1279,6 +1286,7 @@ static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo)
1279 1286
1280fail: 1287fail:
1281 /* Release resources in reverse order */ 1288 /* Release resources in reverse order */
1289 brcmf_free(devinfo->dev);
1282 kfree(bus); 1290 kfree(bus);
1283 brcmf_usb_detach(devinfo); 1291 brcmf_usb_detach(devinfo);
1284 return ret; 1292 return ret;
@@ -1292,6 +1300,7 @@ brcmf_usb_disconnect_cb(struct brcmf_usbdev_info *devinfo)
1292 brcmf_dbg(USB, "Enter, bus_pub %p\n", devinfo); 1300 brcmf_dbg(USB, "Enter, bus_pub %p\n", devinfo);
1293 1301
1294 brcmf_detach(devinfo->dev); 1302 brcmf_detach(devinfo->dev);
1303 brcmf_free(devinfo->dev);
1295 kfree(devinfo->bus_pub.bus); 1304 kfree(devinfo->bus_pub.bus);
1296 brcmf_usb_detach(devinfo); 1305 brcmf_usb_detach(devinfo);
1297} 1306}
@@ -1435,10 +1444,12 @@ static int brcmf_usb_suspend(struct usb_interface *intf, pm_message_t state)
1435 1444
1436 brcmf_dbg(USB, "Enter\n"); 1445 brcmf_dbg(USB, "Enter\n");
1437 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_SLEEP; 1446 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_SLEEP;
1438 if (devinfo->wowl_enabled) 1447 if (devinfo->wowl_enabled) {
1439 brcmf_cancel_all_urbs(devinfo); 1448 brcmf_cancel_all_urbs(devinfo);
1440 else 1449 } else {
1441 brcmf_detach(&usb->dev); 1450 brcmf_detach(&usb->dev);
1451 brcmf_free(&usb->dev);
1452 }
1442 return 0; 1453 return 0;
1443} 1454}
1444 1455
@@ -1451,8 +1462,19 @@ static int brcmf_usb_resume(struct usb_interface *intf)
1451 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev); 1462 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev);
1452 1463
1453 brcmf_dbg(USB, "Enter\n"); 1464 brcmf_dbg(USB, "Enter\n");
1454 if (!devinfo->wowl_enabled) 1465 if (!devinfo->wowl_enabled) {
1455 return brcmf_attach(devinfo->dev, devinfo->settings); 1466 int err;
1467
1468 err = brcmf_alloc(&usb->dev, devinfo->settings);
1469 if (err)
1470 return err;
1471
1472 err = brcmf_attach(devinfo->dev);
1473 if (err) {
1474 brcmf_free(devinfo->dev);
1475 return err;
1476 }
1477 }
1456 1478
1457 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_UP; 1479 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_UP;
1458 brcmf_usb_rx_fill_all(devinfo); 1480 brcmf_usb_rx_fill_all(devinfo);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
index 0c57d48f47b1..a3f094568cfb 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
@@ -17748,7 +17748,7 @@ static void wlc_phy_txpwrctrl_pwr_setup_nphy(struct brcms_phy *pi)
17748 num = 8 * 17748 num = 8 *
17749 (16 * b0[tbl_id - 26] + b1[tbl_id - 26] * idx); 17749 (16 * b0[tbl_id - 26] + b1[tbl_id - 26] * idx);
17750 den = 32768 + a1[tbl_id - 26] * idx; 17750 den = 32768 + a1[tbl_id - 26] * idx;
17751 pwr_est = max(((4 * num + den / 2) / den), -8); 17751 pwr_est = max(DIV_ROUND_CLOSEST(4 * num, den), -8);
17752 if (NREV_LT(pi->pubpi.phy_rev, 3)) { 17752 if (NREV_LT(pi->pubpi.phy_rev, 3)) {
17753 if (idx <= 17753 if (idx <=
17754 (uint) (31 - idle_tssi[tbl_id - 26] + 1)) 17754 (uint) (31 - idle_tssi[tbl_id - 26] + 1))
@@ -26990,8 +26990,8 @@ wlc_phy_rxcal_gainctrl_nphy_rev5(struct brcms_phy *pi, u8 rx_core,
26990 NPHY_RXCAL_TONEAMP, 0, cal_type, false); 26990 NPHY_RXCAL_TONEAMP, 0, cal_type, false);
26991 26991
26992 wlc_phy_rx_iq_est_nphy(pi, est, num_samps, 32, 0); 26992 wlc_phy_rx_iq_est_nphy(pi, est, num_samps, 32, 0);
26993 i_pwr = (est[rx_core].i_pwr + num_samps / 2) / num_samps; 26993 i_pwr = DIV_ROUND_CLOSEST(est[rx_core].i_pwr, num_samps);
26994 q_pwr = (est[rx_core].q_pwr + num_samps / 2) / num_samps; 26994 q_pwr = DIV_ROUND_CLOSEST(est[rx_core].q_pwr, num_samps);
26995 curr_pwr = i_pwr + q_pwr; 26995 curr_pwr = i_pwr + q_pwr;
26996 26996
26997 switch (gainctrl_dirn) { 26997 switch (gainctrl_dirn) {
@@ -27673,10 +27673,10 @@ wlc_phy_cal_rxiq_nphy_rev2(struct brcms_phy *pi,
27673 wlc_phy_rx_iq_est_nphy(pi, est, 27673 wlc_phy_rx_iq_est_nphy(pi, est,
27674 num_samps, 32, 27674 num_samps, 32,
27675 0); 27675 0);
27676 i_pwr = (est[rx_core].i_pwr + 27676 i_pwr = DIV_ROUND_CLOSEST(est[rx_core].i_pwr,
27677 num_samps / 2) / num_samps; 27677 num_samps);
27678 q_pwr = (est[rx_core].q_pwr + 27678 q_pwr = DIV_ROUND_CLOSEST(est[rx_core].q_pwr,
27679 num_samps / 2) / num_samps; 27679 num_samps);
27680 tot_pwr[gain_pass] = i_pwr + q_pwr; 27680 tot_pwr[gain_pass] = i_pwr + q_pwr;
27681 } else { 27681 } else {
27682 27682
diff --git a/drivers/net/wireless/marvell/libertas/dev.h b/drivers/net/wireless/marvell/libertas/dev.h
index 469134930026..4b6e05a8e5d5 100644
--- a/drivers/net/wireless/marvell/libertas/dev.h
+++ b/drivers/net/wireless/marvell/libertas/dev.h
@@ -58,8 +58,6 @@ struct lbs_private {
58#ifdef CONFIG_LIBERTAS_MESH 58#ifdef CONFIG_LIBERTAS_MESH
59 struct lbs_mesh_stats mstats; 59 struct lbs_mesh_stats mstats;
60 uint16_t mesh_tlv; 60 uint16_t mesh_tlv;
61 u8 mesh_ssid[IEEE80211_MAX_SSID_LEN + 1];
62 u8 mesh_ssid_len;
63 u8 mesh_channel; 61 u8 mesh_channel;
64#endif 62#endif
65 63
diff --git a/drivers/net/wireless/marvell/libertas/mesh.c b/drivers/net/wireless/marvell/libertas/mesh.c
index 2315fdff56c2..2747c957d18c 100644
--- a/drivers/net/wireless/marvell/libertas/mesh.c
+++ b/drivers/net/wireless/marvell/libertas/mesh.c
@@ -86,6 +86,7 @@ static int lbs_mesh_config_send(struct lbs_private *priv,
86static int lbs_mesh_config(struct lbs_private *priv, uint16_t action, 86static int lbs_mesh_config(struct lbs_private *priv, uint16_t action,
87 uint16_t chan) 87 uint16_t chan)
88{ 88{
89 struct wireless_dev *mesh_wdev;
89 struct cmd_ds_mesh_config cmd; 90 struct cmd_ds_mesh_config cmd;
90 struct mrvl_meshie *ie; 91 struct mrvl_meshie *ie;
91 92
@@ -105,10 +106,17 @@ static int lbs_mesh_config(struct lbs_private *priv, uint16_t action,
105 ie->val.active_protocol_id = MARVELL_MESH_PROTO_ID_HWMP; 106 ie->val.active_protocol_id = MARVELL_MESH_PROTO_ID_HWMP;
106 ie->val.active_metric_id = MARVELL_MESH_METRIC_ID; 107 ie->val.active_metric_id = MARVELL_MESH_METRIC_ID;
107 ie->val.mesh_capability = MARVELL_MESH_CAPABILITY; 108 ie->val.mesh_capability = MARVELL_MESH_CAPABILITY;
108 ie->val.mesh_id_len = priv->mesh_ssid_len; 109
109 memcpy(ie->val.mesh_id, priv->mesh_ssid, priv->mesh_ssid_len); 110 if (priv->mesh_dev) {
111 mesh_wdev = priv->mesh_dev->ieee80211_ptr;
112 ie->val.mesh_id_len = mesh_wdev->mesh_id_up_len;
113 memcpy(ie->val.mesh_id, mesh_wdev->ssid,
114 mesh_wdev->mesh_id_up_len);
115 }
116
110 ie->len = sizeof(struct mrvl_meshie_val) - 117 ie->len = sizeof(struct mrvl_meshie_val) -
111 IEEE80211_MAX_SSID_LEN + priv->mesh_ssid_len; 118 IEEE80211_MAX_SSID_LEN + ie->val.mesh_id_len;
119
112 cmd.length = cpu_to_le16(sizeof(struct mrvl_meshie_val)); 120 cmd.length = cpu_to_le16(sizeof(struct mrvl_meshie_val));
113 break; 121 break;
114 case CMD_ACT_MESH_CONFIG_STOP: 122 case CMD_ACT_MESH_CONFIG_STOP:
@@ -117,8 +125,8 @@ static int lbs_mesh_config(struct lbs_private *priv, uint16_t action,
117 return -1; 125 return -1;
118 } 126 }
119 lbs_deb_cmd("mesh config action %d type %x channel %d SSID %*pE\n", 127 lbs_deb_cmd("mesh config action %d type %x channel %d SSID %*pE\n",
120 action, priv->mesh_tlv, chan, priv->mesh_ssid_len, 128 action, priv->mesh_tlv, chan, ie->val.mesh_id_len,
121 priv->mesh_ssid); 129 ie->val.mesh_id);
122 130
123 return __lbs_mesh_config_send(priv, &cmd, action, priv->mesh_tlv); 131 return __lbs_mesh_config_send(priv, &cmd, action, priv->mesh_tlv);
124} 132}
@@ -863,12 +871,6 @@ int lbs_init_mesh(struct lbs_private *priv)
863 /* Stop meshing until interface is brought up */ 871 /* Stop meshing until interface is brought up */
864 lbs_mesh_config(priv, CMD_ACT_MESH_CONFIG_STOP, 1); 872 lbs_mesh_config(priv, CMD_ACT_MESH_CONFIG_STOP, 1);
865 873
866 if (priv->mesh_tlv) {
867 sprintf(priv->mesh_ssid, "mesh");
868 priv->mesh_ssid_len = 4;
869 ret = 1;
870 }
871
872 return ret; 874 return ret;
873} 875}
874 876
@@ -997,6 +999,13 @@ static int lbs_add_mesh(struct lbs_private *priv)
997 999
998 mesh_wdev->iftype = NL80211_IFTYPE_MESH_POINT; 1000 mesh_wdev->iftype = NL80211_IFTYPE_MESH_POINT;
999 mesh_wdev->wiphy = priv->wdev->wiphy; 1001 mesh_wdev->wiphy = priv->wdev->wiphy;
1002
1003 if (priv->mesh_tlv) {
1004 sprintf(mesh_wdev->ssid, "mesh");
1005 mesh_wdev->mesh_id_up_len = 4;
1006 ret = 1;
1007 }
1008
1000 mesh_wdev->netdev = mesh_dev; 1009 mesh_wdev->netdev = mesh_dev;
1001 1010
1002 mesh_dev->ml_priv = priv; 1011 mesh_dev->ml_priv = priv;
diff --git a/drivers/net/wireless/marvell/libertas/mesh.h b/drivers/net/wireless/marvell/libertas/mesh.h
index dfe22c91aade..1561018f226f 100644
--- a/drivers/net/wireless/marvell/libertas/mesh.h
+++ b/drivers/net/wireless/marvell/libertas/mesh.h
@@ -24,8 +24,7 @@ void lbs_remove_mesh(struct lbs_private *priv);
24 24
25static inline bool lbs_mesh_activated(struct lbs_private *priv) 25static inline bool lbs_mesh_activated(struct lbs_private *priv)
26{ 26{
27 /* Mesh SSID is only programmed after successful init */ 27 return !!priv->mesh_tlv;
28 return priv->mesh_ssid_len != 0;
29} 28}
30 29
31int lbs_mesh_set_channel(struct lbs_private *priv, u8 channel); 30int lbs_mesh_set_channel(struct lbs_private *priv, u8 channel);
diff --git a/drivers/net/wireless/realtek/rtlwifi/base.h b/drivers/net/wireless/realtek/rtlwifi/base.h
index 99565ad09cdc..e4a7e074ae3f 100644
--- a/drivers/net/wireless/realtek/rtlwifi/base.h
+++ b/drivers/net/wireless/realtek/rtlwifi/base.h
@@ -46,15 +46,6 @@ enum ap_peer {
46#define MAX_LISTEN_INTERVAL 10 46#define MAX_LISTEN_INTERVAL 10
47#define MAX_RATE_TRIES 4 47#define MAX_RATE_TRIES 4
48 48
49#define SET_80211_HDR_FRAME_CONTROL(_hdr, _val) \
50 WRITEEF2BYTE(_hdr, _val)
51#define SET_80211_HDR_TYPE_AND_SUBTYPE(_hdr, _val) \
52 WRITEEF1BYTE(_hdr, _val)
53#define SET_80211_HDR_PWR_MGNT(_hdr, _val) \
54 SET_BITS_TO_LE_2BYTE(_hdr, 12, 1, _val)
55#define SET_80211_HDR_TO_DS(_hdr, _val) \
56 SET_BITS_TO_LE_2BYTE(_hdr, 8, 1, _val)
57
58#define SET_80211_PS_POLL_AID(_hdr, _val) \ 49#define SET_80211_PS_POLL_AID(_hdr, _val) \
59 (*(u16 *)((u8 *)(_hdr) + 2) = _val) 50 (*(u16 *)((u8 *)(_hdr) + 2) = _val)
60#define SET_80211_PS_POLL_BSSID(_hdr, _val) \ 51#define SET_80211_PS_POLL_BSSID(_hdr, _val) \
@@ -62,30 +53,12 @@ enum ap_peer {
62#define SET_80211_PS_POLL_TA(_hdr, _val) \ 53#define SET_80211_PS_POLL_TA(_hdr, _val) \
63 ether_addr_copy(((u8 *)(_hdr))+10, (u8 *)(_val)) 54 ether_addr_copy(((u8 *)(_hdr))+10, (u8 *)(_val))
64 55
65#define SET_80211_HDR_DURATION(_hdr, _val) \
66 (*(u16 *)((u8 *)(_hdr) + FRAME_OFFSET_DURATION) = le16_to_cpu(_val))
67#define SET_80211_HDR_ADDRESS1(_hdr, _val) \ 56#define SET_80211_HDR_ADDRESS1(_hdr, _val) \
68 CP_MACADDR((u8 *)(_hdr)+FRAME_OFFSET_ADDRESS1, (u8 *)(_val)) 57 CP_MACADDR((u8 *)(_hdr)+FRAME_OFFSET_ADDRESS1, (u8 *)(_val))
69#define SET_80211_HDR_ADDRESS2(_hdr, _val) \ 58#define SET_80211_HDR_ADDRESS2(_hdr, _val) \
70 CP_MACADDR((u8 *)(_hdr)+FRAME_OFFSET_ADDRESS2, (u8 *)(_val)) 59 CP_MACADDR((u8 *)(_hdr)+FRAME_OFFSET_ADDRESS2, (u8 *)(_val))
71#define SET_80211_HDR_ADDRESS3(_hdr, _val) \ 60#define SET_80211_HDR_ADDRESS3(_hdr, _val) \
72 CP_MACADDR((u8 *)(_hdr)+FRAME_OFFSET_ADDRESS3, (u8 *)(_val)) 61 CP_MACADDR((u8 *)(_hdr)+FRAME_OFFSET_ADDRESS3, (u8 *)(_val))
73#define SET_80211_HDR_FRAGMENT_SEQUENCE(_hdr, _val) \
74 WRITEEF2BYTE((u8 *)(_hdr)+FRAME_OFFSET_SEQUENCE, _val)
75
76#define SET_BEACON_PROBE_RSP_TIME_STAMP_LOW(__phdr, __val) \
77 WRITEEF4BYTE(((u8 *)(__phdr)) + 24, __val)
78#define SET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(__phdr, __val) \
79 WRITEEF4BYTE(((u8 *)(__phdr)) + 28, __val)
80#define SET_BEACON_PROBE_RSP_BEACON_INTERVAL(__phdr, __val) \
81 WRITEEF2BYTE(((u8 *)(__phdr)) + 32, __val)
82#define GET_BEACON_PROBE_RSP_CAPABILITY_INFO(__phdr) \
83 READEF2BYTE(((u8 *)(__phdr)) + 34)
84#define SET_BEACON_PROBE_RSP_CAPABILITY_INFO(__phdr, __val) \
85 WRITEEF2BYTE(((u8 *)(__phdr)) + 34, __val)
86#define MASK_BEACON_PROBE_RSP_CAPABILITY_INFO(__phdr, __val) \
87 SET_BEACON_PROBE_RSP_CAPABILITY_INFO(__phdr, \
88 (GET_BEACON_PROBE_RSP_CAPABILITY_INFO(__phdr) & (~(__val))))
89 62
90#define SET_TX_DESC_SPE_RPT(__pdesc, __val) \ 63#define SET_TX_DESC_SPE_RPT(__pdesc, __val) \
91 SET_BITS_TO_LE_4BYTE((__pdesc) + 8, 19, 1, __val) 64 SET_BITS_TO_LE_4BYTE((__pdesc) + 8, 19, 1, __val)
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/def.h b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/def.h
index fa2e1b063f68..edcca42c7464 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/def.h
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/def.h
@@ -12,35 +12,6 @@
12#define RX_CMD_QUEUE 1 12#define RX_CMD_QUEUE 1
13 13
14#define C2H_RX_CMD_HDR_LEN 8 14#define C2H_RX_CMD_HDR_LEN 8
15#define GET_C2H_CMD_CMD_LEN(__prxhdr) \
16 LE_BITS_TO_4BYTE((__prxhdr), 0, 16)
17#define GET_C2H_CMD_ELEMENT_ID(__prxhdr) \
18 LE_BITS_TO_4BYTE((__prxhdr), 16, 8)
19#define GET_C2H_CMD_CMD_SEQ(__prxhdr) \
20 LE_BITS_TO_4BYTE((__prxhdr), 24, 7)
21#define GET_C2H_CMD_CONTINUE(__prxhdr) \
22 LE_BITS_TO_4BYTE((__prxhdr), 31, 1)
23#define GET_C2H_CMD_CONTENT(__prxhdr) \
24 ((u8 *)(__prxhdr) + C2H_RX_CMD_HDR_LEN)
25
26#define GET_C2H_CMD_FEEDBACK_ELEMENT_ID(__pcmdfbhdr) \
27 LE_BITS_TO_4BYTE((__pcmdfbhdr), 0, 8)
28#define GET_C2H_CMD_FEEDBACK_CCX_LEN(__pcmdfbhdr) \
29 LE_BITS_TO_4BYTE((__pcmdfbhdr), 8, 8)
30#define GET_C2H_CMD_FEEDBACK_CCX_CMD_CNT(__pcmdfbhdr) \
31 LE_BITS_TO_4BYTE((__pcmdfbhdr), 16, 16)
32#define GET_C2H_CMD_FEEDBACK_CCX_MAC_ID(__pcmdfbhdr) \
33 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 0, 5)
34#define GET_C2H_CMD_FEEDBACK_CCX_VALID(__pcmdfbhdr) \
35 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 7, 1)
36#define GET_C2H_CMD_FEEDBACK_CCX_RETRY_CNT(__pcmdfbhdr) \
37 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 8, 5)
38#define GET_C2H_CMD_FEEDBACK_CCX_TOK(__pcmdfbhdr) \
39 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 15, 1)
40#define GET_C2H_CMD_FEEDBACK_CCX_QSEL(__pcmdfbhdr) \
41 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 16, 4)
42#define GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pcmdfbhdr) \
43 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 20, 12)
44 15
45#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3) 16#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
46 17
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/def.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/def.h
index 147bf2407f8f..34486bd3e109 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/def.h
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/def.h
@@ -17,39 +17,6 @@
17#define RX_MPDU_QUEUE 0 17#define RX_MPDU_QUEUE 0
18#define RX_CMD_QUEUE 1 18#define RX_CMD_QUEUE 1
19 19
20#define C2H_RX_CMD_HDR_LEN 8
21#define GET_C2H_CMD_CMD_LEN(__prxhdr) \
22 LE_BITS_TO_4BYTE((__prxhdr), 0, 16)
23#define GET_C2H_CMD_ELEMENT_ID(__prxhdr) \
24 LE_BITS_TO_4BYTE((__prxhdr), 16, 8)
25#define GET_C2H_CMD_CMD_SEQ(__prxhdr) \
26 LE_BITS_TO_4BYTE((__prxhdr), 24, 7)
27#define GET_C2H_CMD_CONTINUE(__prxhdr) \
28 LE_BITS_TO_4BYTE((__prxhdr), 31, 1)
29#define GET_C2H_CMD_CONTENT(__prxhdr) \
30 ((u8 *)(__prxhdr) + C2H_RX_CMD_HDR_LEN)
31
32#define GET_C2H_CMD_FEEDBACK_ELEMENT_ID(__pcmdfbhdr) \
33 LE_BITS_TO_4BYTE((__pcmdfbhdr), 0, 8)
34#define GET_C2H_CMD_FEEDBACK_CCX_LEN(__pcmdfbhdr) \
35 LE_BITS_TO_4BYTE((__pcmdfbhdr), 8, 8)
36#define GET_C2H_CMD_FEEDBACK_CCX_CMD_CNT(__pcmdfbhdr) \
37 LE_BITS_TO_4BYTE((__pcmdfbhdr), 16, 16)
38#define GET_C2H_CMD_FEEDBACK_CCX_MAC_ID(__pcmdfbhdr) \
39 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 0, 5)
40#define GET_C2H_CMD_FEEDBACK_CCX_VALID(__pcmdfbhdr) \
41 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 7, 1)
42#define GET_C2H_CMD_FEEDBACK_CCX_RETRY_CNT(__pcmdfbhdr) \
43 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 8, 5)
44#define GET_C2H_CMD_FEEDBACK_CCX_TOK(__pcmdfbhdr) \
45 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 15, 1)
46#define GET_C2H_CMD_FEEDBACK_CCX_QSEL(__pcmdfbhdr) \
47 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 16, 4)
48#define GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pcmdfbhdr) \
49 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 20, 12)
50#define GET_RX_STATUS_DESC_BUFF_ADDR(__pdesc) \
51 SHIFT_AND_MASK_LE(__pdesc + 24, 0, 32)
52
53#define CHIP_VER_B BIT(4) 20#define CHIP_VER_B BIT(4)
54#define CHIP_BONDING_IDENTIFIER(_value) (((_value) >> 22) & 0x3) 21#define CHIP_BONDING_IDENTIFIER(_value) (((_value) >> 22) & 0x3)
55#define CHIP_BONDING_92C_1T2R 0x1 22#define CHIP_BONDING_92C_1T2R 0x1
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c
index 123dbf0903a1..fc9a3aae047f 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c
@@ -33,27 +33,6 @@ static u8 _rtl92c_query_rxpwrpercentage(s8 antpower)
33 return 100 + antpower; 33 return 100 + antpower;
34} 34}
35 35
36static u8 _rtl92c_evm_db_to_percentage(s8 value)
37{
38 s8 ret_val;
39
40 ret_val = value;
41
42 if (ret_val >= 0)
43 ret_val = 0;
44
45 if (ret_val <= -33)
46 ret_val = -33;
47
48 ret_val = 0 - ret_val;
49 ret_val *= 3;
50
51 if (ret_val == 99)
52 ret_val = 100;
53
54 return ret_val;
55}
56
57static long _rtl92ce_signal_scale_mapping(struct ieee80211_hw *hw, 36static long _rtl92ce_signal_scale_mapping(struct ieee80211_hw *hw,
58 long currsig) 37 long currsig)
59{ 38{
@@ -243,7 +222,7 @@ static void _rtl92ce_query_rxphystatus(struct ieee80211_hw *hw,
243 max_spatial_stream = 1; 222 max_spatial_stream = 1;
244 223
245 for (i = 0; i < max_spatial_stream; i++) { 224 for (i = 0; i < max_spatial_stream; i++) {
246 evm = _rtl92c_evm_db_to_percentage(p_drvinfo->rxevm[i]); 225 evm = rtl_evm_db_to_percentage(p_drvinfo->rxevm[i]);
247 226
248 if (packet_match_bssid) { 227 if (packet_match_bssid) {
249 /* Fill value in RFD, Get the first 228 /* Fill value in RFD, Get the first
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/mac.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/mac.c
index c8daad1e749f..cec19b32c7e2 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/mac.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/mac.c
@@ -577,22 +577,6 @@ static u8 _rtl92c_query_rxpwrpercentage(s8 antpower)
577 return 100 + antpower; 577 return 100 + antpower;
578} 578}
579 579
580static u8 _rtl92c_evm_db_to_percentage(s8 value)
581{
582 s8 ret_val;
583
584 ret_val = value;
585 if (ret_val >= 0)
586 ret_val = 0;
587 if (ret_val <= -33)
588 ret_val = -33;
589 ret_val = 0 - ret_val;
590 ret_val *= 3;
591 if (ret_val == 99)
592 ret_val = 100;
593 return ret_val;
594}
595
596static long _rtl92c_signal_scale_mapping(struct ieee80211_hw *hw, 580static long _rtl92c_signal_scale_mapping(struct ieee80211_hw *hw,
597 long currsig) 581 long currsig)
598{ 582{
@@ -743,7 +727,7 @@ static void _rtl92c_query_rxphystatus(struct ieee80211_hw *hw,
743 else 727 else
744 max_spatial_stream = 1; 728 max_spatial_stream = 1;
745 for (i = 0; i < max_spatial_stream; i++) { 729 for (i = 0; i < max_spatial_stream; i++) {
746 evm = _rtl92c_evm_db_to_percentage(p_drvinfo->rxevm[i]); 730 evm = rtl_evm_db_to_percentage(p_drvinfo->rxevm[i]);
747 if (packet_match_bssid) { 731 if (packet_match_bssid) {
748 if (i == 0) 732 if (i == 0)
749 pstats->signalquality = 733 pstats->signalquality =
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/def.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/def.h
index fa33b05db052..21726d9b4aef 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/def.h
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/def.h
@@ -26,37 +26,6 @@
26#define RX_MPDU_QUEUE 0 26#define RX_MPDU_QUEUE 0
27#define RX_CMD_QUEUE 1 27#define RX_CMD_QUEUE 1
28 28
29#define C2H_RX_CMD_HDR_LEN 8
30#define GET_C2H_CMD_CMD_LEN(__prxhdr) \
31 LE_BITS_TO_4BYTE((__prxhdr), 0, 16)
32#define GET_C2H_CMD_ELEMENT_ID(__prxhdr) \
33 LE_BITS_TO_4BYTE((__prxhdr), 16, 8)
34#define GET_C2H_CMD_CMD_SEQ(__prxhdr) \
35 LE_BITS_TO_4BYTE((__prxhdr), 24, 7)
36#define GET_C2H_CMD_CONTINUE(__prxhdr) \
37 LE_BITS_TO_4BYTE((__prxhdr), 31, 1)
38#define GET_C2H_CMD_CONTENT(__prxhdr) \
39 ((u8 *)(__prxhdr) + C2H_RX_CMD_HDR_LEN)
40
41#define GET_C2H_CMD_FEEDBACK_ELEMENT_ID(__pcmdfbhdr) \
42 LE_BITS_TO_4BYTE((__pcmdfbhdr), 0, 8)
43#define GET_C2H_CMD_FEEDBACK_CCX_LEN(__pcmdfbhdr) \
44 LE_BITS_TO_4BYTE((__pcmdfbhdr), 8, 8)
45#define GET_C2H_CMD_FEEDBACK_CCX_CMD_CNT(__pcmdfbhdr) \
46 LE_BITS_TO_4BYTE((__pcmdfbhdr), 16, 16)
47#define GET_C2H_CMD_FEEDBACK_CCX_MAC_ID(__pcmdfbhdr) \
48 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 0, 5)
49#define GET_C2H_CMD_FEEDBACK_CCX_VALID(__pcmdfbhdr) \
50 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 7, 1)
51#define GET_C2H_CMD_FEEDBACK_CCX_RETRY_CNT(__pcmdfbhdr) \
52 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 8, 5)
53#define GET_C2H_CMD_FEEDBACK_CCX_TOK(__pcmdfbhdr) \
54 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 15, 1)
55#define GET_C2H_CMD_FEEDBACK_CCX_QSEL(__pcmdfbhdr) \
56 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 16, 4)
57#define GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pcmdfbhdr) \
58 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 20, 12)
59
60enum version_8192d { 29enum version_8192d {
61 VERSION_TEST_CHIP_88C = 0x0000, 30 VERSION_TEST_CHIP_88C = 0x0000,
62 VERSION_TEST_CHIP_92C = 0x0020, 31 VERSION_TEST_CHIP_92C = 0x0020,
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
index d162884a9e00..2494e1f118f8 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
@@ -4,6 +4,7 @@
4#include "../wifi.h" 4#include "../wifi.h"
5#include "../pci.h" 5#include "../pci.h"
6#include "../base.h" 6#include "../base.h"
7#include "../stats.h"
7#include "reg.h" 8#include "reg.h"
8#include "def.h" 9#include "def.h"
9#include "phy.h" 10#include "phy.h"
@@ -32,21 +33,6 @@ static u8 _rtl92d_query_rxpwrpercentage(s8 antpower)
32 return 100 + antpower; 33 return 100 + antpower;
33} 34}
34 35
35static u8 _rtl92d_evm_db_to_percentage(s8 value)
36{
37 s8 ret_val = value;
38
39 if (ret_val >= 0)
40 ret_val = 0;
41 if (ret_val <= -33)
42 ret_val = -33;
43 ret_val = 0 - ret_val;
44 ret_val *= 3;
45 if (ret_val == 99)
46 ret_val = 100;
47 return ret_val;
48}
49
50static long _rtl92de_translate_todbm(struct ieee80211_hw *hw, 36static long _rtl92de_translate_todbm(struct ieee80211_hw *hw,
51 u8 signal_strength_index) 37 u8 signal_strength_index)
52{ 38{
@@ -215,7 +201,7 @@ static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw,
215 else 201 else
216 max_spatial_stream = 1; 202 max_spatial_stream = 1;
217 for (i = 0; i < max_spatial_stream; i++) { 203 for (i = 0; i < max_spatial_stream; i++) {
218 evm = _rtl92d_evm_db_to_percentage(p_drvinfo->rxevm[i]); 204 evm = rtl_evm_db_to_percentage(p_drvinfo->rxevm[i]);
219 if (packet_match_bssid) { 205 if (packet_match_bssid) {
220 if (i == 0) 206 if (i == 0)
221 pstats->signalquality = 207 pstats->signalquality =
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/def.h b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/def.h
index 42958df6b5d4..84505a8500c0 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/def.h
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/def.h
@@ -11,37 +11,6 @@
11#define RX_MPDU_QUEUE 0 11#define RX_MPDU_QUEUE 0
12#define RX_CMD_QUEUE 1 12#define RX_CMD_QUEUE 1
13 13
14#define C2H_RX_CMD_HDR_LEN 8
15#define GET_C2H_CMD_CMD_LEN(__prxhdr) \
16 LE_BITS_TO_4BYTE((__prxhdr), 0, 16)
17#define GET_C2H_CMD_ELEMENT_ID(__prxhdr) \
18 LE_BITS_TO_4BYTE((__prxhdr), 16, 8)
19#define GET_C2H_CMD_CMD_SEQ(__prxhdr) \
20 LE_BITS_TO_4BYTE((__prxhdr), 24, 7)
21#define GET_C2H_CMD_CONTINUE(__prxhdr) \
22 LE_BITS_TO_4BYTE((__prxhdr), 31, 1)
23#define GET_C2H_CMD_CONTENT(__prxhdr) \
24 ((u8 *)(__prxhdr) + C2H_RX_CMD_HDR_LEN)
25
26#define GET_C2H_CMD_FEEDBACK_ELEMENT_ID(__pcmdfbhdr) \
27 LE_BITS_TO_4BYTE((__pcmdfbhdr), 0, 8)
28#define GET_C2H_CMD_FEEDBACK_CCX_LEN(__pcmdfbhdr) \
29 LE_BITS_TO_4BYTE((__pcmdfbhdr), 8, 8)
30#define GET_C2H_CMD_FEEDBACK_CCX_CMD_CNT(__pcmdfbhdr) \
31 LE_BITS_TO_4BYTE((__pcmdfbhdr), 16, 16)
32#define GET_C2H_CMD_FEEDBACK_CCX_MAC_ID(__pcmdfbhdr) \
33 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 0, 5)
34#define GET_C2H_CMD_FEEDBACK_CCX_VALID(__pcmdfbhdr) \
35 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 7, 1)
36#define GET_C2H_CMD_FEEDBACK_CCX_RETRY_CNT(__pcmdfbhdr) \
37 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 8, 5)
38#define GET_C2H_CMD_FEEDBACK_CCX_TOK(__pcmdfbhdr) \
39 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 15, 1)
40#define GET_C2H_CMD_FEEDBACK_CCX_QSEL(__pcmdfbhdr) \
41 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 16, 4)
42#define GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pcmdfbhdr) \
43 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 20, 12)
44
45#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3) 14#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
46#define CHIP_BONDING_92C_1T2R 0x1 15#define CHIP_BONDING_92C_1T2R 0x1
47 16
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c
index 90dc91b0d35b..a04ce15d5538 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c
@@ -260,28 +260,29 @@ static void translate_rx_signal_stuff(struct ieee80211_hw *hw,
260bool rtl8723e_rx_query_desc(struct ieee80211_hw *hw, 260bool rtl8723e_rx_query_desc(struct ieee80211_hw *hw,
261 struct rtl_stats *status, 261 struct rtl_stats *status,
262 struct ieee80211_rx_status *rx_status, 262 struct ieee80211_rx_status *rx_status,
263 u8 *pdesc, struct sk_buff *skb) 263 u8 *pdesc8, struct sk_buff *skb)
264{ 264{
265 struct rx_fwinfo_8723e *p_drvinfo; 265 struct rx_fwinfo_8723e *p_drvinfo;
266 struct ieee80211_hdr *hdr; 266 struct ieee80211_hdr *hdr;
267 u32 phystatus = GET_RX_DESC_PHYST(pdesc); 267 __le32 *pdesc = (__le32 *)pdesc8;
268 u32 phystatus = get_rx_desc_physt(pdesc);
268 269
269 status->length = (u16)GET_RX_DESC_PKT_LEN(pdesc); 270 status->length = (u16)get_rx_desc_pkt_len(pdesc);
270 status->rx_drvinfo_size = (u8)GET_RX_DESC_DRV_INFO_SIZE(pdesc) * 271 status->rx_drvinfo_size = (u8)get_rx_desc_drv_info_size(pdesc) *
271 RX_DRV_INFO_SIZE_UNIT; 272 RX_DRV_INFO_SIZE_UNIT;
272 status->rx_bufshift = (u8)(GET_RX_DESC_SHIFT(pdesc) & 0x03); 273 status->rx_bufshift = (u8)(get_rx_desc_shift(pdesc) & 0x03);
273 status->icv = (u16)GET_RX_DESC_ICV(pdesc); 274 status->icv = (u16)get_rx_desc_icv(pdesc);
274 status->crc = (u16)GET_RX_DESC_CRC32(pdesc); 275 status->crc = (u16)get_rx_desc_crc32(pdesc);
275 status->hwerror = (status->crc | status->icv); 276 status->hwerror = (status->crc | status->icv);
276 status->decrypted = !GET_RX_DESC_SWDEC(pdesc); 277 status->decrypted = !get_rx_desc_swdec(pdesc);
277 status->rate = (u8)GET_RX_DESC_RXMCS(pdesc); 278 status->rate = (u8)get_rx_desc_rxmcs(pdesc);
278 status->shortpreamble = (u16)GET_RX_DESC_SPLCP(pdesc); 279 status->shortpreamble = (u16)get_rx_desc_splcp(pdesc);
279 status->isampdu = (bool)(GET_RX_DESC_PAGGR(pdesc) == 1); 280 status->isampdu = (bool)(get_rx_desc_paggr(pdesc) == 1);
280 status->isfirst_ampdu = (bool)((GET_RX_DESC_PAGGR(pdesc) == 1) && 281 status->isfirst_ampdu = (bool)((get_rx_desc_paggr(pdesc) == 1) &&
281 (GET_RX_DESC_FAGGR(pdesc) == 1)); 282 (get_rx_desc_faggr(pdesc) == 1));
282 status->timestamp_low = GET_RX_DESC_TSFL(pdesc); 283 status->timestamp_low = get_rx_desc_tsfl(pdesc);
283 status->rx_is40mhzpacket = (bool)GET_RX_DESC_BW(pdesc); 284 status->rx_is40mhzpacket = (bool)get_rx_desc_bw(pdesc);
284 status->is_ht = (bool)GET_RX_DESC_RXHT(pdesc); 285 status->is_ht = (bool)get_rx_desc_rxht(pdesc);
285 286
286 status->is_cck = RX_HAL_IS_CCK_RATE(status->rate); 287 status->is_cck = RX_HAL_IS_CCK_RATE(status->rate);
287 288
@@ -331,7 +332,7 @@ bool rtl8723e_rx_query_desc(struct ieee80211_hw *hw,
331 p_drvinfo = (struct rx_fwinfo_8723e *)(skb->data + 332 p_drvinfo = (struct rx_fwinfo_8723e *)(skb->data +
332 status->rx_bufshift); 333 status->rx_bufshift);
333 334
334 translate_rx_signal_stuff(hw, skb, status, pdesc, p_drvinfo); 335 translate_rx_signal_stuff(hw, skb, status, pdesc8, p_drvinfo);
335 } 336 }
336 rx_status->signal = status->recvsignalpower + 10; 337 rx_status->signal = status->recvsignalpower + 10;
337 return true; 338 return true;
@@ -350,7 +351,8 @@ void rtl8723e_tx_fill_desc(struct ieee80211_hw *hw,
350 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 351 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
351 bool b_defaultadapter = true; 352 bool b_defaultadapter = true;
352 /* bool b_trigger_ac = false; */ 353 /* bool b_trigger_ac = false; */
353 u8 *pdesc = (u8 *)pdesc_tx; 354 u8 *pdesc8 = (u8 *)pdesc_tx;
355 __le32 *pdesc = (__le32 *)pdesc8;
354 u16 seq_number; 356 u16 seq_number;
355 __le16 fc = hdr->frame_control; 357 __le16 fc = hdr->frame_control;
356 u8 fw_qsel = _rtl8723e_map_hwqueue_to_fwqueue(skb, hw_queue); 358 u8 fw_qsel = _rtl8723e_map_hwqueue_to_fwqueue(skb, hw_queue);
@@ -383,7 +385,7 @@ void rtl8723e_tx_fill_desc(struct ieee80211_hw *hw,
383 385
384 rtl_get_tcb_desc(hw, info, sta, skb, ptcb_desc); 386 rtl_get_tcb_desc(hw, info, sta, skb, ptcb_desc);
385 387
386 CLEAR_PCI_TX_DESC_CONTENT(pdesc, sizeof(struct tx_desc_8723e)); 388 clear_pci_tx_desc_content(pdesc, sizeof(struct tx_desc_8723e));
387 389
388 if (ieee80211_is_nullfunc(fc) || ieee80211_is_ctl(fc)) { 390 if (ieee80211_is_nullfunc(fc) || ieee80211_is_ctl(fc)) {
389 firstseg = true; 391 firstseg = true;
@@ -391,58 +393,58 @@ void rtl8723e_tx_fill_desc(struct ieee80211_hw *hw,
391 } 393 }
392 394
393 if (firstseg) { 395 if (firstseg) {
394 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN); 396 set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
395 397
396 SET_TX_DESC_TX_RATE(pdesc, ptcb_desc->hw_rate); 398 set_tx_desc_tx_rate(pdesc, ptcb_desc->hw_rate);
397 399
398 if (ptcb_desc->use_shortgi || ptcb_desc->use_shortpreamble) 400 if (ptcb_desc->use_shortgi || ptcb_desc->use_shortpreamble)
399 SET_TX_DESC_DATA_SHORTGI(pdesc, 1); 401 set_tx_desc_data_shortgi(pdesc, 1);
400 402
401 if (info->flags & IEEE80211_TX_CTL_AMPDU) { 403 if (info->flags & IEEE80211_TX_CTL_AMPDU) {
402 SET_TX_DESC_AGG_BREAK(pdesc, 1); 404 set_tx_desc_agg_break(pdesc, 1);
403 SET_TX_DESC_MAX_AGG_NUM(pdesc, 0x14); 405 set_tx_desc_max_agg_num(pdesc, 0x14);
404 } 406 }
405 SET_TX_DESC_SEQ(pdesc, seq_number); 407 set_tx_desc_seq(pdesc, seq_number);
406 408
407 SET_TX_DESC_RTS_ENABLE(pdesc, 409 set_tx_desc_rts_enable(pdesc,
408 ((ptcb_desc->rts_enable && 410 ((ptcb_desc->rts_enable &&
409 !ptcb_desc->cts_enable) ? 1 : 0)); 411 !ptcb_desc->cts_enable) ? 1 : 0));
410 SET_TX_DESC_HW_RTS_ENABLE(pdesc, 412 set_tx_desc_hw_rts_enable(pdesc,
411 ((ptcb_desc->rts_enable || 413 ((ptcb_desc->rts_enable ||
412 ptcb_desc->cts_enable) ? 1 : 0)); 414 ptcb_desc->cts_enable) ? 1 : 0));
413 SET_TX_DESC_CTS2SELF(pdesc, 415 set_tx_desc_cts2self(pdesc,
414 ((ptcb_desc->cts_enable) ? 1 : 0)); 416 ((ptcb_desc->cts_enable) ? 1 : 0));
415 SET_TX_DESC_RTS_STBC(pdesc, 417 set_tx_desc_rts_stbc(pdesc,
416 ((ptcb_desc->rts_stbc) ? 1 : 0)); 418 ((ptcb_desc->rts_stbc) ? 1 : 0));
417 419
418 SET_TX_DESC_RTS_RATE(pdesc, ptcb_desc->rts_rate); 420 set_tx_desc_rts_rate(pdesc, ptcb_desc->rts_rate);
419 SET_TX_DESC_RTS_BW(pdesc, 0); 421 set_tx_desc_rts_bw(pdesc, 0);
420 SET_TX_DESC_RTS_SC(pdesc, ptcb_desc->rts_sc); 422 set_tx_desc_rts_sc(pdesc, ptcb_desc->rts_sc);
421 SET_TX_DESC_RTS_SHORT(pdesc, 423 set_tx_desc_rts_short(pdesc,
422 ((ptcb_desc->rts_rate <= DESC92C_RATE54M) ? 424 ((ptcb_desc->rts_rate <= DESC92C_RATE54M) ?
423 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) 425 (ptcb_desc->rts_use_shortpreamble ? 1 : 0)
424 : (ptcb_desc->rts_use_shortgi ? 1 : 0))); 426 : (ptcb_desc->rts_use_shortgi ? 1 : 0)));
425 427
426 if (bw_40) { 428 if (bw_40) {
427 if (ptcb_desc->packet_bw == HT_CHANNEL_WIDTH_20_40) { 429 if (ptcb_desc->packet_bw == HT_CHANNEL_WIDTH_20_40) {
428 SET_TX_DESC_DATA_BW(pdesc, 1); 430 set_tx_desc_data_bw(pdesc, 1);
429 SET_TX_DESC_TX_SUB_CARRIER(pdesc, 3); 431 set_tx_desc_tx_sub_carrier(pdesc, 3);
430 } else { 432 } else {
431 SET_TX_DESC_DATA_BW(pdesc, 0); 433 set_tx_desc_data_bw(pdesc, 0);
432 SET_TX_DESC_TX_SUB_CARRIER(pdesc, 434 set_tx_desc_tx_sub_carrier(pdesc,
433 mac->cur_40_prime_sc); 435 mac->cur_40_prime_sc);
434 } 436 }
435 } else { 437 } else {
436 SET_TX_DESC_DATA_BW(pdesc, 0); 438 set_tx_desc_data_bw(pdesc, 0);
437 SET_TX_DESC_TX_SUB_CARRIER(pdesc, 0); 439 set_tx_desc_tx_sub_carrier(pdesc, 0);
438 } 440 }
439 441
440 SET_TX_DESC_LINIP(pdesc, 0); 442 set_tx_desc_linip(pdesc, 0);
441 SET_TX_DESC_PKT_SIZE(pdesc, (u16) skb->len); 443 set_tx_desc_pkt_size(pdesc, (u16)skb->len);
442 444
443 if (sta) { 445 if (sta) {
444 u8 ampdu_density = sta->ht_cap.ampdu_density; 446 u8 ampdu_density = sta->ht_cap.ampdu_density;
445 SET_TX_DESC_AMPDU_DENSITY(pdesc, ampdu_density); 447 set_tx_desc_ampdu_density(pdesc, ampdu_density);
446 } 448 }
447 449
448 if (info->control.hw_key) { 450 if (info->control.hw_key) {
@@ -453,78 +455,79 @@ void rtl8723e_tx_fill_desc(struct ieee80211_hw *hw,
453 case WLAN_CIPHER_SUITE_WEP40: 455 case WLAN_CIPHER_SUITE_WEP40:
454 case WLAN_CIPHER_SUITE_WEP104: 456 case WLAN_CIPHER_SUITE_WEP104:
455 case WLAN_CIPHER_SUITE_TKIP: 457 case WLAN_CIPHER_SUITE_TKIP:
456 SET_TX_DESC_SEC_TYPE(pdesc, 0x1); 458 set_tx_desc_sec_type(pdesc, 0x1);
457 break; 459 break;
458 case WLAN_CIPHER_SUITE_CCMP: 460 case WLAN_CIPHER_SUITE_CCMP:
459 SET_TX_DESC_SEC_TYPE(pdesc, 0x3); 461 set_tx_desc_sec_type(pdesc, 0x3);
460 break; 462 break;
461 default: 463 default:
462 SET_TX_DESC_SEC_TYPE(pdesc, 0x0); 464 set_tx_desc_sec_type(pdesc, 0x0);
463 break; 465 break;
464 466
465 } 467 }
466 } 468 }
467 469
468 SET_TX_DESC_PKT_ID(pdesc, 0); 470 set_tx_desc_pkt_id(pdesc, 0);
469 SET_TX_DESC_QUEUE_SEL(pdesc, fw_qsel); 471 set_tx_desc_queue_sel(pdesc, fw_qsel);
470 472
471 SET_TX_DESC_DATA_RATE_FB_LIMIT(pdesc, 0x1F); 473 set_tx_desc_data_rate_fb_limit(pdesc, 0x1F);
472 SET_TX_DESC_RTS_RATE_FB_LIMIT(pdesc, 0xF); 474 set_tx_desc_rts_rate_fb_limit(pdesc, 0xF);
473 SET_TX_DESC_DISABLE_FB(pdesc, 0); 475 set_tx_desc_disable_fb(pdesc, 0);
474 SET_TX_DESC_USE_RATE(pdesc, ptcb_desc->use_driver_rate ? 1 : 0); 476 set_tx_desc_use_rate(pdesc, ptcb_desc->use_driver_rate ? 1 : 0);
475 477
476 if (ieee80211_is_data_qos(fc)) { 478 if (ieee80211_is_data_qos(fc)) {
477 if (mac->rdg_en) { 479 if (mac->rdg_en) {
478 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, 480 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE,
479 "Enable RDG function.\n"); 481 "Enable RDG function.\n");
480 SET_TX_DESC_RDG_ENABLE(pdesc, 1); 482 set_tx_desc_rdg_enable(pdesc, 1);
481 SET_TX_DESC_HTC(pdesc, 1); 483 set_tx_desc_htc(pdesc, 1);
482 } 484 }
483 } 485 }
484 } 486 }
485 487
486 SET_TX_DESC_FIRST_SEG(pdesc, (firstseg ? 1 : 0)); 488 set_tx_desc_first_seg(pdesc, (firstseg ? 1 : 0));
487 SET_TX_DESC_LAST_SEG(pdesc, (lastseg ? 1 : 0)); 489 set_tx_desc_last_seg(pdesc, (lastseg ? 1 : 0));
488 490
489 SET_TX_DESC_TX_BUFFER_SIZE(pdesc, (u16) skb->len); 491 set_tx_desc_tx_buffer_size(pdesc, (u16)skb->len);
490 492
491 SET_TX_DESC_TX_BUFFER_ADDRESS(pdesc, mapping); 493 set_tx_desc_tx_buffer_address(pdesc, mapping);
492 494
493 if (rtlpriv->dm.useramask) { 495 if (rtlpriv->dm.useramask) {
494 SET_TX_DESC_RATE_ID(pdesc, ptcb_desc->ratr_index); 496 set_tx_desc_rate_id(pdesc, ptcb_desc->ratr_index);
495 SET_TX_DESC_MACID(pdesc, ptcb_desc->mac_id); 497 set_tx_desc_macid(pdesc, ptcb_desc->mac_id);
496 } else { 498 } else {
497 SET_TX_DESC_RATE_ID(pdesc, 0xC + ptcb_desc->ratr_index); 499 set_tx_desc_rate_id(pdesc, 0xC + ptcb_desc->ratr_index);
498 SET_TX_DESC_MACID(pdesc, ptcb_desc->ratr_index); 500 set_tx_desc_macid(pdesc, ptcb_desc->ratr_index);
499 } 501 }
500 502
501 if ((!ieee80211_is_data_qos(fc)) && ppsc->fwctrl_lps) { 503 if ((!ieee80211_is_data_qos(fc)) && ppsc->fwctrl_lps) {
502 SET_TX_DESC_HWSEQ_EN_8723(pdesc, 1); 504 set_tx_desc_hwseq_en_8723(pdesc, 1);
503 /* SET_TX_DESC_HWSEQ_EN(pdesc, 1); */ 505 /* set_tx_desc_hwseq_en(pdesc, 1); */
504 /* SET_TX_DESC_PKT_ID(pdesc, 8); */ 506 /* set_tx_desc_pkt_id(pdesc, 8); */
505 507
506 if (!b_defaultadapter) 508 if (!b_defaultadapter)
507 SET_TX_DESC_HWSEQ_SEL_8723(pdesc, 1); 509 set_tx_desc_hwseq_sel_8723(pdesc, 1);
508 /* SET_TX_DESC_QOS(pdesc, 1); */ 510 /* set_tx_desc_qos(pdesc, 1); */
509 } 511 }
510 512
511 SET_TX_DESC_MORE_FRAG(pdesc, (lastseg ? 0 : 1)); 513 set_tx_desc_more_frag(pdesc, (lastseg ? 0 : 1));
512 514
513 if (is_multicast_ether_addr(ieee80211_get_DA(hdr)) || 515 if (is_multicast_ether_addr(ieee80211_get_DA(hdr)) ||
514 is_broadcast_ether_addr(ieee80211_get_DA(hdr))) { 516 is_broadcast_ether_addr(ieee80211_get_DA(hdr))) {
515 SET_TX_DESC_BMC(pdesc, 1); 517 set_tx_desc_bmc(pdesc, 1);
516 } 518 }
517 519
518 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); 520 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
519} 521}
520 522
521void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw, 523void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw,
522 u8 *pdesc, bool firstseg, 524 u8 *pdesc8, bool firstseg,
523 bool lastseg, struct sk_buff *skb) 525 bool lastseg, struct sk_buff *skb)
524{ 526{
525 struct rtl_priv *rtlpriv = rtl_priv(hw); 527 struct rtl_priv *rtlpriv = rtl_priv(hw);
526 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 528 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
527 u8 fw_queue = QSLT_BEACON; 529 u8 fw_queue = QSLT_BEACON;
530 __le32 *pdesc = (__le32 *)pdesc8;
528 531
529 dma_addr_t mapping = pci_map_single(rtlpci->pdev, 532 dma_addr_t mapping = pci_map_single(rtlpci->pdev,
530 skb->data, skb->len, 533 skb->data, skb->len,
@@ -538,44 +541,44 @@ void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw,
538 "DMA mapping error\n"); 541 "DMA mapping error\n");
539 return; 542 return;
540 } 543 }
541 CLEAR_PCI_TX_DESC_CONTENT(pdesc, TX_DESC_SIZE); 544 clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE);
542 545
543 if (firstseg) 546 if (firstseg)
544 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN); 547 set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
545 548
546 SET_TX_DESC_TX_RATE(pdesc, DESC92C_RATE1M); 549 set_tx_desc_tx_rate(pdesc, DESC92C_RATE1M);
547 550
548 SET_TX_DESC_SEQ(pdesc, 0); 551 set_tx_desc_seq(pdesc, 0);
549 552
550 SET_TX_DESC_LINIP(pdesc, 0); 553 set_tx_desc_linip(pdesc, 0);
551 554
552 SET_TX_DESC_QUEUE_SEL(pdesc, fw_queue); 555 set_tx_desc_queue_sel(pdesc, fw_queue);
553 556
554 SET_TX_DESC_FIRST_SEG(pdesc, 1); 557 set_tx_desc_first_seg(pdesc, 1);
555 SET_TX_DESC_LAST_SEG(pdesc, 1); 558 set_tx_desc_last_seg(pdesc, 1);
556 559
557 SET_TX_DESC_TX_BUFFER_SIZE(pdesc, (u16) (skb->len)); 560 set_tx_desc_tx_buffer_size(pdesc, (u16)(skb->len));
558 561
559 SET_TX_DESC_TX_BUFFER_ADDRESS(pdesc, mapping); 562 set_tx_desc_tx_buffer_address(pdesc, mapping);
560 563
561 SET_TX_DESC_RATE_ID(pdesc, 7); 564 set_tx_desc_rate_id(pdesc, 7);
562 SET_TX_DESC_MACID(pdesc, 0); 565 set_tx_desc_macid(pdesc, 0);
563 566
564 SET_TX_DESC_OWN(pdesc, 1); 567 set_tx_desc_own(pdesc, 1);
565 568
566 SET_TX_DESC_PKT_SIZE((u8 *)pdesc, (u16)(skb->len)); 569 set_tx_desc_pkt_size(pdesc, (u16)(skb->len));
567 570
568 SET_TX_DESC_FIRST_SEG(pdesc, 1); 571 set_tx_desc_first_seg(pdesc, 1);
569 SET_TX_DESC_LAST_SEG(pdesc, 1); 572 set_tx_desc_last_seg(pdesc, 1);
570 573
571 SET_TX_DESC_OFFSET(pdesc, 0x20); 574 set_tx_desc_offset(pdesc, 0x20);
572 575
573 SET_TX_DESC_USE_RATE(pdesc, 1); 576 set_tx_desc_use_rate(pdesc, 1);
574 577
575 if (!ieee80211_is_data_qos(fc)) { 578 if (!ieee80211_is_data_qos(fc)) {
576 SET_TX_DESC_HWSEQ_EN_8723(pdesc, 1); 579 set_tx_desc_hwseq_en_8723(pdesc, 1);
577 /* SET_TX_DESC_HWSEQ_EN(pdesc, 1); */ 580 /* set_tx_desc_hwseq_en(pdesc, 1); */
578 /* SET_TX_DESC_PKT_ID(pdesc, 8); */ 581 /* set_tx_desc_pkt_id(pdesc, 8); */
579 } 582 }
580 583
581 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD, 584 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
@@ -583,16 +586,18 @@ void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw,
583 pdesc, TX_DESC_SIZE); 586 pdesc, TX_DESC_SIZE);
584} 587}
585 588
586void rtl8723e_set_desc(struct ieee80211_hw *hw, u8 *pdesc, 589void rtl8723e_set_desc(struct ieee80211_hw *hw, u8 *pdesc8,
587 bool istx, u8 desc_name, u8 *val) 590 bool istx, u8 desc_name, u8 *val)
588{ 591{
592 __le32 *pdesc = (__le32 *)pdesc8;
593
589 if (istx == true) { 594 if (istx == true) {
590 switch (desc_name) { 595 switch (desc_name) {
591 case HW_DESC_OWN: 596 case HW_DESC_OWN:
592 SET_TX_DESC_OWN(pdesc, 1); 597 set_tx_desc_own(pdesc, 1);
593 break; 598 break;
594 case HW_DESC_TX_NEXTDESC_ADDR: 599 case HW_DESC_TX_NEXTDESC_ADDR:
595 SET_TX_DESC_NEXT_DESC_ADDRESS(pdesc, *(u32 *) val); 600 set_tx_desc_next_desc_address(pdesc, *(u32 *)val);
596 break; 601 break;
597 default: 602 default:
598 WARN_ONCE(true, "rtl8723ae: ERR txdesc :%d not processed\n", 603 WARN_ONCE(true, "rtl8723ae: ERR txdesc :%d not processed\n",
@@ -602,16 +607,16 @@ void rtl8723e_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
602 } else { 607 } else {
603 switch (desc_name) { 608 switch (desc_name) {
604 case HW_DESC_RXOWN: 609 case HW_DESC_RXOWN:
605 SET_RX_DESC_OWN(pdesc, 1); 610 set_rx_desc_own(pdesc, 1);
606 break; 611 break;
607 case HW_DESC_RXBUFF_ADDR: 612 case HW_DESC_RXBUFF_ADDR:
608 SET_RX_DESC_BUFF_ADDR(pdesc, *(u32 *) val); 613 set_rx_desc_buff_addr(pdesc, *(u32 *)val);
609 break; 614 break;
610 case HW_DESC_RXPKT_LEN: 615 case HW_DESC_RXPKT_LEN:
611 SET_RX_DESC_PKT_LEN(pdesc, *(u32 *) val); 616 set_rx_desc_pkt_len(pdesc, *(u32 *)val);
612 break; 617 break;
613 case HW_DESC_RXERO: 618 case HW_DESC_RXERO:
614 SET_RX_DESC_EOR(pdesc, 1); 619 set_rx_desc_eor(pdesc, 1);
615 break; 620 break;
616 default: 621 default:
617 WARN_ONCE(true, "rtl8723ae: ERR rxdesc :%d not processed\n", 622 WARN_ONCE(true, "rtl8723ae: ERR rxdesc :%d not processed\n",
@@ -622,17 +627,18 @@ void rtl8723e_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
622} 627}
623 628
624u64 rtl8723e_get_desc(struct ieee80211_hw *hw, 629u64 rtl8723e_get_desc(struct ieee80211_hw *hw,
625 u8 *pdesc, bool istx, u8 desc_name) 630 u8 *pdesc8, bool istx, u8 desc_name)
626{ 631{
627 u32 ret = 0; 632 u32 ret = 0;
633 __le32 *pdesc = (__le32 *)pdesc8;
628 634
629 if (istx == true) { 635 if (istx == true) {
630 switch (desc_name) { 636 switch (desc_name) {
631 case HW_DESC_OWN: 637 case HW_DESC_OWN:
632 ret = GET_TX_DESC_OWN(pdesc); 638 ret = get_tx_desc_own(pdesc);
633 break; 639 break;
634 case HW_DESC_TXBUFF_ADDR: 640 case HW_DESC_TXBUFF_ADDR:
635 ret = GET_TX_DESC_TX_BUFFER_ADDRESS(pdesc); 641 ret = get_tx_desc_tx_buffer_address(pdesc);
636 break; 642 break;
637 default: 643 default:
638 WARN_ONCE(true, "rtl8723ae: ERR txdesc :%d not processed\n", 644 WARN_ONCE(true, "rtl8723ae: ERR txdesc :%d not processed\n",
@@ -642,13 +648,13 @@ u64 rtl8723e_get_desc(struct ieee80211_hw *hw,
642 } else { 648 } else {
643 switch (desc_name) { 649 switch (desc_name) {
644 case HW_DESC_OWN: 650 case HW_DESC_OWN:
645 ret = GET_RX_DESC_OWN(pdesc); 651 ret = get_rx_desc_own(pdesc);
646 break; 652 break;
647 case HW_DESC_RXPKT_LEN: 653 case HW_DESC_RXPKT_LEN:
648 ret = GET_RX_DESC_PKT_LEN(pdesc); 654 ret = get_rx_desc_pkt_len(pdesc);
649 break; 655 break;
650 case HW_DESC_RXBUFF_ADDR: 656 case HW_DESC_RXBUFF_ADDR:
651 ret = GET_RX_DESC_BUFF_ADDR(pdesc); 657 ret = get_rx_desc_buff_addr(pdesc);
652 break; 658 break;
653 default: 659 default:
654 WARN_ONCE(true, "rtl8723ae: ERR rxdesc :%d not processed\n", 660 WARN_ONCE(true, "rtl8723ae: ERR rxdesc :%d not processed\n",
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h
index 4a19ea76b290..2d25f62a4d52 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h
@@ -14,486 +14,324 @@
14#define USB_HWDESC_HEADER_LEN 32 14#define USB_HWDESC_HEADER_LEN 32
15#define CRCLENGTH 4 15#define CRCLENGTH 4
16 16
17#define SET_TX_DESC_PKT_SIZE(__pdesc, __val) \ 17static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
18 SET_BITS_TO_LE_4BYTE(__pdesc, 0, 16, __val) 18{
19#define SET_TX_DESC_OFFSET(__pdesc, __val) \ 19 le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
20 SET_BITS_TO_LE_4BYTE(__pdesc, 16, 8, __val) 20}
21#define SET_TX_DESC_BMC(__pdesc, __val) \ 21
22 SET_BITS_TO_LE_4BYTE(__pdesc, 24, 1, __val) 22static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
23#define SET_TX_DESC_HTC(__pdesc, __val) \ 23{
24 SET_BITS_TO_LE_4BYTE(__pdesc, 25, 1, __val) 24 le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
25#define SET_TX_DESC_LAST_SEG(__pdesc, __val) \ 25}
26 SET_BITS_TO_LE_4BYTE(__pdesc, 26, 1, __val) 26
27#define SET_TX_DESC_FIRST_SEG(__pdesc, __val) \ 27static inline void set_tx_desc_bmc(__le32 *__pdesc, u32 __val)
28 SET_BITS_TO_LE_4BYTE(__pdesc, 27, 1, __val) 28{
29#define SET_TX_DESC_LINIP(__pdesc, __val) \ 29 le32p_replace_bits(__pdesc, __val, BIT(24));
30 SET_BITS_TO_LE_4BYTE(__pdesc, 28, 1, __val) 30}
31#define SET_TX_DESC_NO_ACM(__pdesc, __val) \ 31
32 SET_BITS_TO_LE_4BYTE(__pdesc, 29, 1, __val) 32static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val)
33#define SET_TX_DESC_GF(__pdesc, __val) \ 33{
34 SET_BITS_TO_LE_4BYTE(__pdesc, 30, 1, __val) 34 le32p_replace_bits(__pdesc, __val, BIT(25));
35#define SET_TX_DESC_OWN(__pdesc, __val) \ 35}
36 SET_BITS_TO_LE_4BYTE(__pdesc, 31, 1, __val) 36
37 37static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
38#define GET_TX_DESC_PKT_SIZE(__pdesc) \ 38{
39 LE_BITS_TO_4BYTE(__pdesc, 0, 16) 39 le32p_replace_bits(__pdesc, __val, BIT(26));
40#define GET_TX_DESC_OFFSET(__pdesc) \ 40}
41 LE_BITS_TO_4BYTE(__pdesc, 16, 8) 41
42#define GET_TX_DESC_BMC(__pdesc) \ 42static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
43 LE_BITS_TO_4BYTE(__pdesc, 24, 1) 43{
44#define GET_TX_DESC_HTC(__pdesc) \ 44 le32p_replace_bits(__pdesc, __val, BIT(27));
45 LE_BITS_TO_4BYTE(__pdesc, 25, 1) 45}
46#define GET_TX_DESC_LAST_SEG(__pdesc) \ 46
47 LE_BITS_TO_4BYTE(__pdesc, 26, 1) 47static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
48#define GET_TX_DESC_FIRST_SEG(__pdesc) \ 48{
49 LE_BITS_TO_4BYTE(__pdesc, 27, 1) 49 le32p_replace_bits(__pdesc, __val, BIT(28));
50#define GET_TX_DESC_LINIP(__pdesc) \ 50}
51 LE_BITS_TO_4BYTE(__pdesc, 28, 1) 51
52#define GET_TX_DESC_NO_ACM(__pdesc) \ 52static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
53 LE_BITS_TO_4BYTE(__pdesc, 29, 1) 53{
54#define GET_TX_DESC_GF(__pdesc) \ 54 le32p_replace_bits(__pdesc, __val, BIT(31));
55 LE_BITS_TO_4BYTE(__pdesc, 30, 1) 55}
56#define GET_TX_DESC_OWN(__pdesc) \ 56
57 LE_BITS_TO_4BYTE(__pdesc, 31, 1) 57static inline u32 get_tx_desc_own(__le32 *__pdesc)
58 58{
59#define SET_TX_DESC_MACID(__pdesc, __val) \ 59 return le32_get_bits(*__pdesc, BIT(31));
60 SET_BITS_TO_LE_4BYTE(__pdesc+4, 0, 5, __val) 60}
61#define SET_TX_DESC_AGG_BREAK(__pdesc, __val) \ 61
62 SET_BITS_TO_LE_4BYTE(__pdesc+4, 5, 1, __val) 62static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
63#define SET_TX_DESC_BK(__pdesc, __val) \ 63{
64 SET_BITS_TO_LE_4BYTE(__pdesc+4, 6, 1, __val) 64 le32p_replace_bits((__pdesc + 1), __val, GENMASK(4, 0));
65#define SET_TX_DESC_RDG_ENABLE(__pdesc, __val) \ 65}
66 SET_BITS_TO_LE_4BYTE(__pdesc+4, 7, 1, __val) 66
67#define SET_TX_DESC_QUEUE_SEL(__pdesc, __val) \ 67static inline void set_tx_desc_agg_break(__le32 *__pdesc, u32 __val)
68 SET_BITS_TO_LE_4BYTE(__pdesc+4, 8, 5, __val) 68{
69#define SET_TX_DESC_RDG_NAV_EXT(__pdesc, __val) \ 69 le32p_replace_bits((__pdesc + 1), __val, BIT(5));
70 SET_BITS_TO_LE_4BYTE(__pdesc+4, 13, 1, __val) 70}
71#define SET_TX_DESC_LSIG_TXOP_EN(__pdesc, __val) \ 71
72 SET_BITS_TO_LE_4BYTE(__pdesc+4, 14, 1, __val) 72static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val)
73#define SET_TX_DESC_PIFS(__pdesc, __val) \ 73{
74 SET_BITS_TO_LE_4BYTE(__pdesc+4, 15, 1, __val) 74 le32p_replace_bits((__pdesc + 1), __val, BIT(7));
75#define SET_TX_DESC_RATE_ID(__pdesc, __val) \ 75}
76 SET_BITS_TO_LE_4BYTE(__pdesc+4, 16, 4, __val) 76
77#define SET_TX_DESC_NAV_USE_HDR(__pdesc, __val) \ 77static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
78 SET_BITS_TO_LE_4BYTE(__pdesc+4, 20, 1, __val) 78{
79#define SET_TX_DESC_EN_DESC_ID(__pdesc, __val) \ 79 le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8));
80 SET_BITS_TO_LE_4BYTE(__pdesc+4, 21, 1, __val) 80}
81#define SET_TX_DESC_SEC_TYPE(__pdesc, __val) \ 81
82 SET_BITS_TO_LE_4BYTE(__pdesc+4, 22, 2, __val) 82static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val)
83#define SET_TX_DESC_PKT_OFFSET(__pdesc, __val) \ 83{
84 SET_BITS_TO_LE_4BYTE(__pdesc+4, 24, 8, __val) 84 le32p_replace_bits((__pdesc + 1), __val, GENMASK(19, 16));
85 85}
86#define GET_TX_DESC_MACID(__pdesc) \ 86
87 LE_BITS_TO_4BYTE(__pdesc+4, 0, 5) 87static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
88#define GET_TX_DESC_AGG_ENABLE(__pdesc) \ 88{
89 LE_BITS_TO_4BYTE(__pdesc+4, 5, 1) 89 le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22));
90#define GET_TX_DESC_AGG_BREAK(__pdesc) \ 90}
91 LE_BITS_TO_4BYTE(__pdesc+4, 6, 1) 91
92#define GET_TX_DESC_RDG_ENABLE(__pdesc) \ 92static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val)
93 LE_BITS_TO_4BYTE(__pdesc+4, 7, 1) 93{
94#define GET_TX_DESC_QUEUE_SEL(__pdesc) \ 94 le32p_replace_bits((__pdesc + 2), __val, BIT(17));
95 LE_BITS_TO_4BYTE(__pdesc+4, 8, 5) 95}
96#define GET_TX_DESC_RDG_NAV_EXT(__pdesc) \ 96
97 LE_BITS_TO_4BYTE(__pdesc+4, 13, 1) 97static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val)
98#define GET_TX_DESC_LSIG_TXOP_EN(__pdesc) \ 98{
99 LE_BITS_TO_4BYTE(__pdesc+4, 14, 1) 99 le32p_replace_bits((__pdesc + 2), __val, GENMASK(22, 20));
100#define GET_TX_DESC_PIFS(__pdesc) \ 100}
101 LE_BITS_TO_4BYTE(__pdesc+4, 15, 1) 101
102#define GET_TX_DESC_RATE_ID(__pdesc) \ 102static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
103 LE_BITS_TO_4BYTE(__pdesc+4, 16, 4) 103{
104#define GET_TX_DESC_NAV_USE_HDR(__pdesc) \ 104 le32p_replace_bits((__pdesc + 3), __val, GENMASK(27, 16));
105 LE_BITS_TO_4BYTE(__pdesc+4, 20, 1) 105}
106#define GET_TX_DESC_EN_DESC_ID(__pdesc) \ 106
107 LE_BITS_TO_4BYTE(__pdesc+4, 21, 1) 107static inline void set_tx_desc_pkt_id(__le32 *__pdesc, u32 __val)
108#define GET_TX_DESC_SEC_TYPE(__pdesc) \ 108{
109 LE_BITS_TO_4BYTE(__pdesc+4, 22, 2) 109 le32p_replace_bits((__pdesc + 3), __val, GENMASK(31, 28));
110#define GET_TX_DESC_PKT_OFFSET(__pdesc) \ 110}
111 LE_BITS_TO_4BYTE(__pdesc+4, 24, 8)
112
113#define SET_TX_DESC_RTS_RC(__pdesc, __val) \
114 SET_BITS_TO_LE_4BYTE(__pdesc+8, 0, 6, __val)
115#define SET_TX_DESC_DATA_RC(__pdesc, __val) \
116 SET_BITS_TO_LE_4BYTE(__pdesc+8, 6, 6, __val)
117#define SET_TX_DESC_BAR_RTY_TH(__pdesc, __val) \
118 SET_BITS_TO_LE_4BYTE(__pdesc+8, 14, 2, __val)
119#define SET_TX_DESC_MORE_FRAG(__pdesc, __val) \
120 SET_BITS_TO_LE_4BYTE(__pdesc+8, 17, 1, __val)
121#define SET_TX_DESC_RAW(__pdesc, __val) \
122 SET_BITS_TO_LE_4BYTE(__pdesc+8, 18, 1, __val)
123#define SET_TX_DESC_CCX(__pdesc, __val) \
124 SET_BITS_TO_LE_4BYTE(__pdesc+8, 19, 1, __val)
125#define SET_TX_DESC_AMPDU_DENSITY(__pdesc, __val) \
126 SET_BITS_TO_LE_4BYTE(__pdesc+8, 20, 3, __val)
127#define SET_TX_DESC_ANTSEL_A(__pdesc, __val) \
128 SET_BITS_TO_LE_4BYTE(__pdesc+8, 24, 1, __val)
129#define SET_TX_DESC_ANTSEL_B(__pdesc, __val) \
130 SET_BITS_TO_LE_4BYTE(__pdesc+8, 25, 1, __val)
131#define SET_TX_DESC_TX_ANT_CCK(__pdesc, __val) \
132 SET_BITS_TO_LE_4BYTE(__pdesc+8, 26, 2, __val)
133#define SET_TX_DESC_TX_ANTL(__pdesc, __val) \
134 SET_BITS_TO_LE_4BYTE(__pdesc+8, 28, 2, __val)
135#define SET_TX_DESC_TX_ANT_HT(__pdesc, __val) \
136 SET_BITS_TO_LE_4BYTE(__pdesc+8, 30, 2, __val)
137
138#define GET_TX_DESC_RTS_RC(__pdesc) \
139 LE_BITS_TO_4BYTE(__pdesc+8, 0, 6)
140#define GET_TX_DESC_DATA_RC(__pdesc) \
141 LE_BITS_TO_4BYTE(__pdesc+8, 6, 6)
142#define GET_TX_DESC_BAR_RTY_TH(__pdesc) \
143 LE_BITS_TO_4BYTE(__pdesc+8, 14, 2)
144#define GET_TX_DESC_MORE_FRAG(__pdesc) \
145 LE_BITS_TO_4BYTE(__pdesc+8, 17, 1)
146#define GET_TX_DESC_RAW(__pdesc) \
147 LE_BITS_TO_4BYTE(__pdesc+8, 18, 1)
148#define GET_TX_DESC_CCX(__pdesc) \
149 LE_BITS_TO_4BYTE(__pdesc+8, 19, 1)
150#define GET_TX_DESC_AMPDU_DENSITY(__pdesc) \
151 LE_BITS_TO_4BYTE(__pdesc+8, 20, 3)
152#define GET_TX_DESC_ANTSEL_A(__pdesc) \
153 LE_BITS_TO_4BYTE(__pdesc+8, 24, 1)
154#define GET_TX_DESC_ANTSEL_B(__pdesc) \
155 LE_BITS_TO_4BYTE(__pdesc+8, 25, 1)
156#define GET_TX_DESC_TX_ANT_CCK(__pdesc) \
157 LE_BITS_TO_4BYTE(__pdesc+8, 26, 2)
158#define GET_TX_DESC_TX_ANTL(__pdesc) \
159 LE_BITS_TO_4BYTE(__pdesc+8, 28, 2)
160#define GET_TX_DESC_TX_ANT_HT(__pdesc) \
161 LE_BITS_TO_4BYTE(__pdesc+8, 30, 2)
162
163#define SET_TX_DESC_NEXT_HEAP_PAGE(__pdesc, __val) \
164 SET_BITS_TO_LE_4BYTE(__pdesc+12, 0, 8, __val)
165#define SET_TX_DESC_TAIL_PAGE(__pdesc, __val) \
166 SET_BITS_TO_LE_4BYTE(__pdesc+12, 8, 8, __val)
167#define SET_TX_DESC_SEQ(__pdesc, __val) \
168 SET_BITS_TO_LE_4BYTE(__pdesc+12, 16, 12, __val)
169#define SET_TX_DESC_PKT_ID(__pdesc, __val) \
170 SET_BITS_TO_LE_4BYTE(__pdesc+12, 28, 4, __val)
171
172#define GET_TX_DESC_NEXT_HEAP_PAGE(__pdesc) \
173 LE_BITS_TO_4BYTE(__pdesc+12, 0, 8)
174#define GET_TX_DESC_TAIL_PAGE(__pdesc) \
175 LE_BITS_TO_4BYTE(__pdesc+12, 8, 8)
176#define GET_TX_DESC_SEQ(__pdesc) \
177 LE_BITS_TO_4BYTE(__pdesc+12, 16, 12)
178#define GET_TX_DESC_PKT_ID(__pdesc) \
179 LE_BITS_TO_4BYTE(__pdesc+12, 28, 4)
180 111
181/* For RTL8723 */ 112/* For RTL8723 */
182#define SET_TX_DESC_TRIGGER_INT(__pdesc, __val) \ 113static inline void set_tx_desc_hwseq_en_8723(__le32 *__pdesc, u32 __val)
183 SET_BITS_TO_LE_4BYTE(__pdesc+12, 30, 1, __val) 114{
184#define SET_TX_DESC_HWSEQ_EN_8723(__pdesc, __val) \ 115 le32p_replace_bits((__pdesc + 3), __val, BIT(31));
185 SET_BITS_TO_LE_4BYTE(__pdesc+12, 31, 1, __val) 116}
186#define SET_TX_DESC_HWSEQ_SEL_8723(__txdesc, __value) \ 117
187 SET_BITS_TO_LE_4BYTE(__txdesc+16, 6, 2, __value) 118static inline void set_tx_desc_hwseq_sel_8723(__le32 *__txdesc, u32 __value)
188 119{
189#define SET_TX_DESC_RTS_RATE(__pdesc, __val) \ 120 le32p_replace_bits((__txdesc + 4), __value, GENMASK(7, 6));
190 SET_BITS_TO_LE_4BYTE(__pdesc+16, 0, 5, __val) 121}
191#define SET_TX_DESC_AP_DCFE(__pdesc, __val) \ 122
192 SET_BITS_TO_LE_4BYTE(__pdesc+16, 5, 1, __val) 123static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
193#define SET_TX_DESC_QOS(__pdesc, __val) \ 124{
194 SET_BITS_TO_LE_4BYTE(__pdesc+16, 6, 1, __val) 125 le32p_replace_bits((__pdesc + 4), __val, GENMASK(4, 0));
195#define SET_TX_DESC_HWSEQ_EN(__pdesc, __val) \ 126}
196 SET_BITS_TO_LE_4BYTE(__pdesc+16, 7, 1, __val) 127
197#define SET_TX_DESC_USE_RATE(__pdesc, __val) \ 128static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val)
198 SET_BITS_TO_LE_4BYTE(__pdesc+16, 8, 1, __val) 129{
199#define SET_TX_DESC_DISABLE_RTS_FB(__pdesc, __val) \ 130 le32p_replace_bits((__pdesc + 4), __val, BIT(8));
200 SET_BITS_TO_LE_4BYTE(__pdesc+16, 9, 1, __val) 131}
201#define SET_TX_DESC_DISABLE_FB(__pdesc, __val) \ 132
202 SET_BITS_TO_LE_4BYTE(__pdesc+16, 10, 1, __val) 133static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val)
203#define SET_TX_DESC_CTS2SELF(__pdesc, __val) \ 134{
204 SET_BITS_TO_LE_4BYTE(__pdesc+16, 11, 1, __val) 135 le32p_replace_bits((__pdesc + 4), __val, BIT(10));
205#define SET_TX_DESC_RTS_ENABLE(__pdesc, __val) \ 136}
206 SET_BITS_TO_LE_4BYTE(__pdesc+16, 12, 1, __val) 137
207#define SET_TX_DESC_HW_RTS_ENABLE(__pdesc, __val) \ 138static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val)
208 SET_BITS_TO_LE_4BYTE(__pdesc+16, 13, 1, __val) 139{
209#define SET_TX_DESC_PORT_ID(__pdesc, __val) \ 140 le32p_replace_bits((__pdesc + 4), __val, BIT(11));
210 SET_BITS_TO_LE_4BYTE(__pdesc+16, 14, 1, __val) 141}
211#define SET_TX_DESC_WAIT_DCTS(__pdesc, __val) \ 142
212 SET_BITS_TO_LE_4BYTE(__pdesc+16, 18, 1, __val) 143static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
213#define SET_TX_DESC_CTS2AP_EN(__pdesc, __val) \ 144{
214 SET_BITS_TO_LE_4BYTE(__pdesc+16, 19, 1, __val) 145 le32p_replace_bits((__pdesc + 4), __val, BIT(12));
215#define SET_TX_DESC_TX_SUB_CARRIER(__pdesc, __val) \ 146}
216 SET_BITS_TO_LE_4BYTE(__pdesc+16, 20, 2, __val) 147
217#define SET_TX_DESC_TX_STBC(__pdesc, __val) \ 148static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val)
218 SET_BITS_TO_LE_4BYTE(__pdesc+16, 22, 2, __val) 149{
219#define SET_TX_DESC_DATA_SHORT(__pdesc, __val) \ 150 le32p_replace_bits((__pdesc + 4), __val, BIT(13));
220 SET_BITS_TO_LE_4BYTE(__pdesc+16, 24, 1, __val) 151}
221#define SET_TX_DESC_DATA_BW(__pdesc, __val) \ 152
222 SET_BITS_TO_LE_4BYTE(__pdesc+16, 25, 1, __val) 153static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
223#define SET_TX_DESC_RTS_SHORT(__pdesc, __val) \ 154{
224 SET_BITS_TO_LE_4BYTE(__pdesc+16, 26, 1, __val) 155 le32p_replace_bits((__pdesc + 4), __val, GENMASK(21, 20));
225#define SET_TX_DESC_RTS_BW(__pdesc, __val) \ 156}
226 SET_BITS_TO_LE_4BYTE(__pdesc+16, 27, 1, __val) 157
227#define SET_TX_DESC_RTS_SC(__pdesc, __val) \ 158static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val)
228 SET_BITS_TO_LE_4BYTE(__pdesc+16, 28, 2, __val) 159{
229#define SET_TX_DESC_RTS_STBC(__pdesc, __val) \ 160 le32p_replace_bits((__pdesc + 4), __val, BIT(25));
230 SET_BITS_TO_LE_4BYTE(__pdesc+16, 30, 2, __val) 161}
231 162
232#define GET_TX_DESC_RTS_RATE(__pdesc) \ 163static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
233 LE_BITS_TO_4BYTE(__pdesc+16, 0, 5) 164{
234#define GET_TX_DESC_AP_DCFE(__pdesc) \ 165 le32p_replace_bits((__pdesc + 4), __val, BIT(26));
235 LE_BITS_TO_4BYTE(__pdesc+16, 5, 1) 166}
236#define GET_TX_DESC_QOS(__pdesc) \ 167
237 LE_BITS_TO_4BYTE(__pdesc+16, 6, 1) 168static inline void set_tx_desc_rts_bw(__le32 *__pdesc, u32 __val)
238#define GET_TX_DESC_HWSEQ_EN(__pdesc) \ 169{
239 LE_BITS_TO_4BYTE(__pdesc+16, 7, 1) 170 le32p_replace_bits((__pdesc + 4), __val, BIT(27));
240#define GET_TX_DESC_USE_RATE(__pdesc) \ 171}
241 LE_BITS_TO_4BYTE(__pdesc+16, 8, 1) 172
242#define GET_TX_DESC_DISABLE_RTS_FB(__pdesc) \ 173static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val)
243 LE_BITS_TO_4BYTE(__pdesc+16, 9, 1) 174{
244#define GET_TX_DESC_DISABLE_FB(__pdesc) \ 175 le32p_replace_bits((__pdesc + 4), __val, GENMASK(29, 28));
245 LE_BITS_TO_4BYTE(__pdesc+16, 10, 1) 176}
246#define GET_TX_DESC_CTS2SELF(__pdesc) \ 177
247 LE_BITS_TO_4BYTE(__pdesc+16, 11, 1) 178static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val)
248#define GET_TX_DESC_RTS_ENABLE(__pdesc) \ 179{
249 LE_BITS_TO_4BYTE(__pdesc+16, 12, 1) 180 le32p_replace_bits((__pdesc + 4), __val, GENMASK(31, 30));
250#define GET_TX_DESC_HW_RTS_ENABLE(__pdesc) \ 181}
251 LE_BITS_TO_4BYTE(__pdesc+16, 13, 1) 182
252#define GET_TX_DESC_PORT_ID(__pdesc) \ 183static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
253 LE_BITS_TO_4BYTE(__pdesc+16, 14, 1) 184{
254#define GET_TX_DESC_WAIT_DCTS(__pdesc) \ 185 le32p_replace_bits((__pdesc + 5), __val, GENMASK(5, 0));
255 LE_BITS_TO_4BYTE(__pdesc+16, 18, 1) 186}
256#define GET_TX_DESC_CTS2AP_EN(__pdesc) \ 187
257 LE_BITS_TO_4BYTE(__pdesc+16, 19, 1) 188static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
258#define GET_TX_DESC_TX_SUB_CARRIER(__pdesc) \ 189{
259 LE_BITS_TO_4BYTE(__pdesc+16, 20, 2) 190 le32p_replace_bits((__pdesc + 5), __val, BIT(6));
260#define GET_TX_DESC_TX_STBC(__pdesc) \ 191}
261 LE_BITS_TO_4BYTE(__pdesc+16, 22, 2) 192
262#define GET_TX_DESC_DATA_SHORT(__pdesc) \ 193static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
263 LE_BITS_TO_4BYTE(__pdesc+16, 24, 1) 194{
264#define GET_TX_DESC_DATA_BW(__pdesc) \ 195 le32p_replace_bits((__pdesc + 5), __val, GENMASK(12, 8));
265 LE_BITS_TO_4BYTE(__pdesc+16, 25, 1) 196}
266#define GET_TX_DESC_RTS_SHORT(__pdesc) \ 197
267 LE_BITS_TO_4BYTE(__pdesc+16, 26, 1) 198static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val)
268#define GET_TX_DESC_RTS_BW(__pdesc) \ 199{
269 LE_BITS_TO_4BYTE(__pdesc+16, 27, 1) 200 le32p_replace_bits((__pdesc + 5), __val, GENMASK(16, 13));
270#define GET_TX_DESC_RTS_SC(__pdesc) \ 201}
271 LE_BITS_TO_4BYTE(__pdesc+16, 28, 2) 202
272#define GET_TX_DESC_RTS_STBC(__pdesc) \ 203static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val)
273 LE_BITS_TO_4BYTE(__pdesc+16, 30, 2) 204{
274 205 le32p_replace_bits((__pdesc + 6), __val, GENMASK(15, 11));
275#define SET_TX_DESC_TX_RATE(__pdesc, __val) \ 206}
276 SET_BITS_TO_LE_4BYTE(__pdesc+20, 0, 6, __val) 207
277#define SET_TX_DESC_DATA_SHORTGI(__pdesc, __val) \ 208static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
278 SET_BITS_TO_LE_4BYTE(__pdesc+20, 6, 1, __val) 209{
279#define SET_TX_DESC_CCX_TAG(__pdesc, __val) \ 210 le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0));
280 SET_BITS_TO_LE_4BYTE(__pdesc+20, 7, 1, __val) 211}
281#define SET_TX_DESC_DATA_RATE_FB_LIMIT(__pdesc, __val) \ 212
282 SET_BITS_TO_LE_4BYTE(__pdesc+20, 8, 5, __val) 213static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
283#define SET_TX_DESC_RTS_RATE_FB_LIMIT(__pdesc, __val) \ 214{
284 SET_BITS_TO_LE_4BYTE(__pdesc+20, 13, 4, __val) 215 *(__pdesc + 8) = cpu_to_le32(__val);
285#define SET_TX_DESC_RETRY_LIMIT_ENABLE(__pdesc, __val) \ 216}
286 SET_BITS_TO_LE_4BYTE(__pdesc+20, 17, 1, __val) 217
287#define SET_TX_DESC_DATA_RETRY_LIMIT(__pdesc, __val) \ 218static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
288 SET_BITS_TO_LE_4BYTE(__pdesc+20, 18, 6, __val) 219{
289#define SET_TX_DESC_USB_TXAGG_NUM(__pdesc, __val) \ 220 return le32_to_cpu(*(__pdesc + 8));
290 SET_BITS_TO_LE_4BYTE(__pdesc+20, 24, 8, __val) 221}
291 222
292#define GET_TX_DESC_TX_RATE(__pdesc) \ 223static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
293 LE_BITS_TO_4BYTE(__pdesc+20, 0, 6) 224{
294#define GET_TX_DESC_DATA_SHORTGI(__pdesc) \ 225 *(__pdesc + 10) = cpu_to_le32(__val);
295 LE_BITS_TO_4BYTE(__pdesc+20, 6, 1) 226}
296#define GET_TX_DESC_CCX_TAG(__pdesc) \ 227
297 LE_BITS_TO_4BYTE(__pdesc+20, 7, 1) 228static inline u32 get_rx_desc_pkt_len(__le32 *__pdesc)
298#define GET_TX_DESC_DATA_RATE_FB_LIMIT(__pdesc) \ 229{
299 LE_BITS_TO_4BYTE(__pdesc+20, 8, 5) 230 return le32_get_bits(*__pdesc, GENMASK(13, 0));
300#define GET_TX_DESC_RTS_RATE_FB_LIMIT(__pdesc) \ 231}
301 LE_BITS_TO_4BYTE(__pdesc+20, 13, 4) 232
302#define GET_TX_DESC_RETRY_LIMIT_ENABLE(__pdesc) \ 233static inline u32 get_rx_desc_crc32(__le32 *__pdesc)
303 LE_BITS_TO_4BYTE(__pdesc+20, 17, 1) 234{
304#define GET_TX_DESC_DATA_RETRY_LIMIT(__pdesc) \ 235 return le32_get_bits(*__pdesc, BIT(14));
305 LE_BITS_TO_4BYTE(__pdesc+20, 18, 6) 236}
306#define GET_TX_DESC_USB_TXAGG_NUM(__pdesc) \ 237
307 LE_BITS_TO_4BYTE(__pdesc+20, 24, 8) 238static inline u32 get_rx_desc_icv(__le32 *__pdesc)
308 239{
309#define SET_TX_DESC_TXAGC_A(__pdesc, __val) \ 240 return le32_get_bits(*__pdesc, BIT(15));
310 SET_BITS_TO_LE_4BYTE(__pdesc+24, 0, 5, __val) 241}
311#define SET_TX_DESC_TXAGC_B(__pdesc, __val) \ 242
312 SET_BITS_TO_LE_4BYTE(__pdesc+24, 5, 5, __val) 243static inline u32 get_rx_desc_drv_info_size(__le32 *__pdesc)
313#define SET_TX_DESC_USE_MAX_LEN(__pdesc, __val) \ 244{
314 SET_BITS_TO_LE_4BYTE(__pdesc+24, 10, 1, __val) 245 return le32_get_bits(*__pdesc, GENMASK(19, 16));
315#define SET_TX_DESC_MAX_AGG_NUM(__pdesc, __val) \ 246}
316 SET_BITS_TO_LE_4BYTE(__pdesc+24, 11, 5, __val) 247
317#define SET_TX_DESC_MCSG1_MAX_LEN(__pdesc, __val) \ 248static inline u32 get_rx_desc_shift(__le32 *__pdesc)
318 SET_BITS_TO_LE_4BYTE(__pdesc+24, 16, 4, __val) 249{
319#define SET_TX_DESC_MCSG2_MAX_LEN(__pdesc, __val) \ 250 return le32_get_bits(*__pdesc, GENMASK(25, 24));
320 SET_BITS_TO_LE_4BYTE(__pdesc+24, 20, 4, __val) 251}
321#define SET_TX_DESC_MCSG3_MAX_LEN(__pdesc, __val) \ 252
322 SET_BITS_TO_LE_4BYTE(__pdesc+24, 24, 4, __val) 253static inline u32 get_rx_desc_physt(__le32 *__pdesc)
323#define SET_TX_DESC_MCS7_SGI_MAX_LEN(__pdesc, __val)\ 254{
324 SET_BITS_TO_LE_4BYTE(__pdesc+24, 28, 4, __val) 255 return le32_get_bits(*__pdesc, BIT(26));
325 256}
326#define GET_TX_DESC_TXAGC_A(__pdesc) \ 257
327 LE_BITS_TO_4BYTE(__pdesc+24, 0, 5) 258static inline u32 get_rx_desc_swdec(__le32 *__pdesc)
328#define GET_TX_DESC_TXAGC_B(__pdesc) \ 259{
329 LE_BITS_TO_4BYTE(__pdesc+24, 5, 5) 260 return le32_get_bits(*__pdesc, BIT(27));
330#define GET_TX_DESC_USE_MAX_LEN(__pdesc) \ 261}
331 LE_BITS_TO_4BYTE(__pdesc+24, 10, 1) 262
332#define GET_TX_DESC_MAX_AGG_NUM(__pdesc) \ 263static inline u32 get_rx_desc_own(__le32 *__pdesc)
333 LE_BITS_TO_4BYTE(__pdesc+24, 11, 5) 264{
334#define GET_TX_DESC_MCSG1_MAX_LEN(__pdesc) \ 265 return le32_get_bits(*__pdesc, BIT(31));
335 LE_BITS_TO_4BYTE(__pdesc+24, 16, 4) 266}
336#define GET_TX_DESC_MCSG2_MAX_LEN(__pdesc) \ 267
337 LE_BITS_TO_4BYTE(__pdesc+24, 20, 4) 268static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val)
338#define GET_TX_DESC_MCSG3_MAX_LEN(__pdesc) \ 269{
339 LE_BITS_TO_4BYTE(__pdesc+24, 24, 4) 270 le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
340#define GET_TX_DESC_MCS7_SGI_MAX_LEN(__pdesc) \ 271}
341 LE_BITS_TO_4BYTE(__pdesc+24, 28, 4) 272
342 273static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val)
343#define SET_TX_DESC_TX_BUFFER_SIZE(__pdesc, __val) \ 274{
344 SET_BITS_TO_LE_4BYTE(__pdesc+28, 0, 16, __val) 275 le32p_replace_bits(__pdesc, __val, BIT(30));
345#define SET_TX_DESC_MCSG4_MAX_LEN(__pdesc, __val) \ 276}
346 SET_BITS_TO_LE_4BYTE(__pdesc+28, 16, 4, __val) 277
347#define SET_TX_DESC_MCSG5_MAX_LEN(__pdesc, __val) \ 278static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val)
348 SET_BITS_TO_LE_4BYTE(__pdesc+28, 20, 4, __val) 279{
349#define SET_TX_DESC_MCSG6_MAX_LEN(__pdesc, __val) \ 280 le32p_replace_bits(__pdesc, __val, BIT(31));
350 SET_BITS_TO_LE_4BYTE(__pdesc+28, 24, 4, __val) 281}
351#define SET_TX_DESC_MCS15_SGI_MAX_LEN(__pdesc, __val) \ 282
352 SET_BITS_TO_LE_4BYTE(__pdesc+28, 28, 4, __val) 283static inline u32 get_rx_desc_paggr(__le32 *__pdesc)
353 284{
354#define GET_TX_DESC_TX_BUFFER_SIZE(__pdesc) \ 285 return le32_get_bits(*(__pdesc + 1), BIT(14));
355 LE_BITS_TO_4BYTE(__pdesc+28, 0, 16) 286}
356#define GET_TX_DESC_MCSG4_MAX_LEN(__pdesc) \ 287
357 LE_BITS_TO_4BYTE(__pdesc+28, 16, 4) 288static inline u32 get_rx_desc_faggr(__le32 *__pdesc)
358#define GET_TX_DESC_MCSG5_MAX_LEN(__pdesc) \ 289{
359 LE_BITS_TO_4BYTE(__pdesc+28, 20, 4) 290 return le32_get_bits(*(__pdesc + 1), BIT(15));
360#define GET_TX_DESC_MCSG6_MAX_LEN(__pdesc) \ 291}
361 LE_BITS_TO_4BYTE(__pdesc+28, 24, 4) 292
362#define GET_TX_DESC_MCS15_SGI_MAX_LEN(__pdesc) \ 293static inline u32 get_rx_desc_rxmcs(__le32 *__pdesc)
363 LE_BITS_TO_4BYTE(__pdesc+28, 28, 4) 294{
364 295 return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0));
365#define SET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc, __val) \ 296}
366 SET_BITS_TO_LE_4BYTE(__pdesc+32, 0, 32, __val) 297
367#define SET_TX_DESC_TX_BUFFER_ADDRESS64(__pdesc, __val) \ 298static inline u32 get_rx_desc_rxht(__le32 *__pdesc)
368 SET_BITS_TO_LE_4BYTE(__pdesc+36, 0, 32, __val) 299{
369 300 return le32_get_bits(*(__pdesc + 3), BIT(6));
370#define GET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc) \ 301}
371 LE_BITS_TO_4BYTE(__pdesc+32, 0, 32) 302
372#define GET_TX_DESC_TX_BUFFER_ADDRESS64(__pdesc) \ 303static inline u32 get_rx_desc_splcp(__le32 *__pdesc)
373 LE_BITS_TO_4BYTE(__pdesc+36, 0, 32) 304{
374 305 return le32_get_bits(*(__pdesc + 3), BIT(8));
375#define SET_TX_DESC_NEXT_DESC_ADDRESS(__pdesc, __val) \ 306}
376 SET_BITS_TO_LE_4BYTE(__pdesc+40, 0, 32, __val) 307
377#define SET_TX_DESC_NEXT_DESC_ADDRESS64(__pdesc, __val) \ 308static inline u32 get_rx_desc_bw(__le32 *__pdesc)
378 SET_BITS_TO_LE_4BYTE(__pdesc+44, 0, 32, __val) 309{
379 310 return le32_get_bits(*(__pdesc + 3), BIT(9));
380#define GET_TX_DESC_NEXT_DESC_ADDRESS(__pdesc) \ 311}
381 LE_BITS_TO_4BYTE(__pdesc+40, 0, 32) 312
382#define GET_TX_DESC_NEXT_DESC_ADDRESS64(__pdesc) \ 313static inline u32 get_rx_desc_tsfl(__le32 *__pdesc)
383 LE_BITS_TO_4BYTE(__pdesc+44, 0, 32) 314{
384 315 return le32_to_cpu(*(__pdesc + 5));
385#define GET_RX_DESC_PKT_LEN(__pdesc) \ 316}
386 LE_BITS_TO_4BYTE(__pdesc, 0, 14) 317
387#define GET_RX_DESC_CRC32(__pdesc) \ 318static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc)
388 LE_BITS_TO_4BYTE(__pdesc, 14, 1) 319{
389#define GET_RX_DESC_ICV(__pdesc) \ 320 return le32_to_cpu(*(__pdesc + 6));
390 LE_BITS_TO_4BYTE(__pdesc, 15, 1) 321}
391#define GET_RX_DESC_DRV_INFO_SIZE(__pdesc) \ 322
392 LE_BITS_TO_4BYTE(__pdesc, 16, 4) 323static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val)
393#define GET_RX_DESC_SECURITY(__pdesc) \ 324{
394 LE_BITS_TO_4BYTE(__pdesc, 20, 3) 325 *(__pdesc + 6) = cpu_to_le32(__val);
395#define GET_RX_DESC_QOS(__pdesc) \ 326}
396 LE_BITS_TO_4BYTE(__pdesc, 23, 1) 327
397#define GET_RX_DESC_SHIFT(__pdesc) \ 328static inline void clear_pci_tx_desc_content(__le32 *__pdesc, u32 _size)
398 LE_BITS_TO_4BYTE(__pdesc, 24, 2) 329{
399#define GET_RX_DESC_PHYST(__pdesc) \ 330 if (_size > TX_DESC_NEXT_DESC_OFFSET)
400 LE_BITS_TO_4BYTE(__pdesc, 26, 1) 331 memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET);
401#define GET_RX_DESC_SWDEC(__pdesc) \ 332 else
402 LE_BITS_TO_4BYTE(__pdesc, 27, 1) 333 memset(__pdesc, 0, _size);
403#define GET_RX_DESC_LS(__pdesc) \ 334}
404 LE_BITS_TO_4BYTE(__pdesc, 28, 1)
405#define GET_RX_DESC_FS(__pdesc) \
406 LE_BITS_TO_4BYTE(__pdesc, 29, 1)
407#define GET_RX_DESC_EOR(__pdesc) \
408 LE_BITS_TO_4BYTE(__pdesc, 30, 1)
409#define GET_RX_DESC_OWN(__pdesc) \
410 LE_BITS_TO_4BYTE(__pdesc, 31, 1)
411
412#define SET_RX_DESC_PKT_LEN(__pdesc, __val) \
413 SET_BITS_TO_LE_4BYTE(__pdesc, 0, 14, __val)
414#define SET_RX_DESC_EOR(__pdesc, __val) \
415 SET_BITS_TO_LE_4BYTE(__pdesc, 30, 1, __val)
416#define SET_RX_DESC_OWN(__pdesc, __val) \
417 SET_BITS_TO_LE_4BYTE(__pdesc, 31, 1, __val)
418
419#define GET_RX_DESC_MACID(__pdesc) \
420 LE_BITS_TO_4BYTE(__pdesc+4, 0, 5)
421#define GET_RX_DESC_TID(__pdesc) \
422 LE_BITS_TO_4BYTE(__pdesc+4, 5, 4)
423#define GET_RX_DESC_HWRSVD(__pdesc) \
424 LE_BITS_TO_4BYTE(__pdesc+4, 9, 5)
425#define GET_RX_DESC_PAGGR(__pdesc) \
426 LE_BITS_TO_4BYTE(__pdesc+4, 14, 1)
427#define GET_RX_DESC_FAGGR(__pdesc) \
428 LE_BITS_TO_4BYTE(__pdesc+4, 15, 1)
429#define GET_RX_DESC_A1_FIT(__pdesc) \
430 LE_BITS_TO_4BYTE(__pdesc+4, 16, 4)
431#define GET_RX_DESC_A2_FIT(__pdesc) \
432 LE_BITS_TO_4BYTE(__pdesc+4, 20, 4)
433#define GET_RX_DESC_PAM(__pdesc) \
434 LE_BITS_TO_4BYTE(__pdesc+4, 24, 1)
435#define GET_RX_DESC_PWR(__pdesc) \
436 LE_BITS_TO_4BYTE(__pdesc+4, 25, 1)
437#define GET_RX_DESC_MD(__pdesc) \
438 LE_BITS_TO_4BYTE(__pdesc+4, 26, 1)
439#define GET_RX_DESC_MF(__pdesc) \
440 LE_BITS_TO_4BYTE(__pdesc+4, 27, 1)
441#define GET_RX_DESC_TYPE(__pdesc) \
442 LE_BITS_TO_4BYTE(__pdesc+4, 28, 2)
443#define GET_RX_DESC_MC(__pdesc) \
444 LE_BITS_TO_4BYTE(__pdesc+4, 30, 1)
445#define GET_RX_DESC_BC(__pdesc) \
446 LE_BITS_TO_4BYTE(__pdesc+4, 31, 1)
447#define GET_RX_DESC_SEQ(__pdesc) \
448 LE_BITS_TO_4BYTE(__pdesc+8, 0, 12)
449#define GET_RX_DESC_FRAG(__pdesc) \
450 LE_BITS_TO_4BYTE(__pdesc+8, 12, 4)
451#define GET_RX_DESC_NEXT_PKT_LEN(__pdesc) \
452 LE_BITS_TO_4BYTE(__pdesc+8, 16, 14)
453#define GET_RX_DESC_NEXT_IND(__pdesc) \
454 LE_BITS_TO_4BYTE(__pdesc+8, 30, 1)
455#define GET_RX_DESC_RSVD(__pdesc) \
456 LE_BITS_TO_4BYTE(__pdesc+8, 31, 1)
457
458#define GET_RX_DESC_RXMCS(__pdesc) \
459 LE_BITS_TO_4BYTE(__pdesc+12, 0, 6)
460#define GET_RX_DESC_RXHT(__pdesc) \
461 LE_BITS_TO_4BYTE(__pdesc+12, 6, 1)
462#define GET_RX_DESC_SPLCP(__pdesc) \
463 LE_BITS_TO_4BYTE(__pdesc+12, 8, 1)
464#define GET_RX_DESC_BW(__pdesc) \
465 LE_BITS_TO_4BYTE(__pdesc+12, 9, 1)
466#define GET_RX_DESC_HTC(__pdesc) \
467 LE_BITS_TO_4BYTE(__pdesc+12, 10, 1)
468#define GET_RX_DESC_HWPC_ERR(__pdesc) \
469 LE_BITS_TO_4BYTE(__pdesc+12, 14, 1)
470#define GET_RX_DESC_HWPC_IND(__pdesc) \
471 LE_BITS_TO_4BYTE(__pdesc+12, 15, 1)
472#define GET_RX_DESC_IV0(__pdesc) \
473 LE_BITS_TO_4BYTE(__pdesc+12, 16, 16)
474
475#define GET_RX_DESC_IV1(__pdesc) \
476 LE_BITS_TO_4BYTE(__pdesc+16, 0, 32)
477#define GET_RX_DESC_TSFL(__pdesc) \
478 LE_BITS_TO_4BYTE(__pdesc+20, 0, 32)
479
480#define GET_RX_DESC_BUFF_ADDR(__pdesc) \
481 LE_BITS_TO_4BYTE(__pdesc+24, 0, 32)
482#define GET_RX_DESC_BUFF_ADDR64(__pdesc) \
483 LE_BITS_TO_4BYTE(__pdesc+28, 0, 32)
484
485#define SET_RX_DESC_BUFF_ADDR(__pdesc, __val) \
486 SET_BITS_TO_LE_4BYTE(__pdesc+24, 0, 32, __val)
487#define SET_RX_DESC_BUFF_ADDR64(__pdesc, __val) \
488 SET_BITS_TO_LE_4BYTE(__pdesc+28, 0, 32, __val)
489
490#define CLEAR_PCI_TX_DESC_CONTENT(__pdesc, _size) \
491do { \
492 if (_size > TX_DESC_NEXT_DESC_OFFSET) \
493 memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET); \
494 else \
495 memset(__pdesc, 0, _size); \
496} while (0)
497 335
498struct rx_fwinfo_8723e { 336struct rx_fwinfo_8723e {
499 u8 gain_trsw[4]; 337 u8 gain_trsw[4];
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c
index d87ba03fe78f..b8081e196cdf 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c
@@ -26,7 +26,8 @@ static u8 _rtl8723be_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 hw_queue)
26} 26}
27 27
28static void _rtl8723be_query_rxphystatus(struct ieee80211_hw *hw, 28static void _rtl8723be_query_rxphystatus(struct ieee80211_hw *hw,
29 struct rtl_stats *pstatus, u8 *pdesc, 29 struct rtl_stats *pstatus,
30 __le32 *pdesc,
30 struct rx_fwinfo_8723be *p_drvinfo, 31 struct rx_fwinfo_8723be *p_drvinfo,
31 bool bpacket_match_bssid, 32 bool bpacket_match_bssid,
32 bool bpacket_toself, 33 bool bpacket_toself,
@@ -189,7 +190,7 @@ static void _rtl8723be_query_rxphystatus(struct ieee80211_hw *hw,
189static void _rtl8723be_translate_rx_signal_stuff(struct ieee80211_hw *hw, 190static void _rtl8723be_translate_rx_signal_stuff(struct ieee80211_hw *hw,
190 struct sk_buff *skb, 191 struct sk_buff *skb,
191 struct rtl_stats *pstatus, 192 struct rtl_stats *pstatus,
192 u8 *pdesc, 193 __le32 *pdesc,
193 struct rx_fwinfo_8723be *p_drvinfo) 194 struct rx_fwinfo_8723be *p_drvinfo)
194{ 195{
195 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 196 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
@@ -242,12 +243,12 @@ static void _rtl8723be_translate_rx_signal_stuff(struct ieee80211_hw *hw,
242} 243}
243 244
244static void _rtl8723be_insert_emcontent(struct rtl_tcb_desc *ptcb_desc, 245static void _rtl8723be_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
245 u8 *virtualaddress) 246 __le32 *virtualaddress)
246{ 247{
247 u32 dwtmp = 0; 248 u32 dwtmp = 0;
248 memset(virtualaddress, 0, 8); 249 memset(virtualaddress, 0, 8);
249 250
250 SET_EARLYMODE_PKTNUM(virtualaddress, ptcb_desc->empkt_num); 251 set_earlymode_pktnum(virtualaddress, ptcb_desc->empkt_num);
251 if (ptcb_desc->empkt_num == 1) { 252 if (ptcb_desc->empkt_num == 1) {
252 dwtmp = ptcb_desc->empkt_len[0]; 253 dwtmp = ptcb_desc->empkt_len[0];
253 } else { 254 } else {
@@ -255,7 +256,7 @@ static void _rtl8723be_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
255 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 256 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4;
256 dwtmp += ptcb_desc->empkt_len[1]; 257 dwtmp += ptcb_desc->empkt_len[1];
257 } 258 }
258 SET_EARLYMODE_LEN0(virtualaddress, dwtmp); 259 set_earlymode_len0(virtualaddress, dwtmp);
259 260
260 if (ptcb_desc->empkt_num <= 3) { 261 if (ptcb_desc->empkt_num <= 3) {
261 dwtmp = ptcb_desc->empkt_len[2]; 262 dwtmp = ptcb_desc->empkt_len[2];
@@ -264,7 +265,7 @@ static void _rtl8723be_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
264 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 265 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4;
265 dwtmp += ptcb_desc->empkt_len[3]; 266 dwtmp += ptcb_desc->empkt_len[3];
266 } 267 }
267 SET_EARLYMODE_LEN1(virtualaddress, dwtmp); 268 set_earlymode_len1(virtualaddress, dwtmp);
268 if (ptcb_desc->empkt_num <= 5) { 269 if (ptcb_desc->empkt_num <= 5) {
269 dwtmp = ptcb_desc->empkt_len[4]; 270 dwtmp = ptcb_desc->empkt_len[4];
270 } else { 271 } else {
@@ -272,8 +273,8 @@ static void _rtl8723be_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
272 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 273 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4;
273 dwtmp += ptcb_desc->empkt_len[5]; 274 dwtmp += ptcb_desc->empkt_len[5];
274 } 275 }
275 SET_EARLYMODE_LEN2_1(virtualaddress, dwtmp & 0xF); 276 set_earlymode_len2_1(virtualaddress, dwtmp & 0xF);
276 SET_EARLYMODE_LEN2_2(virtualaddress, dwtmp >> 4); 277 set_earlymode_len2_2(virtualaddress, dwtmp >> 4);
277 if (ptcb_desc->empkt_num <= 7) { 278 if (ptcb_desc->empkt_num <= 7) {
278 dwtmp = ptcb_desc->empkt_len[6]; 279 dwtmp = ptcb_desc->empkt_len[6];
279 } else { 280 } else {
@@ -281,7 +282,7 @@ static void _rtl8723be_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
281 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 282 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4;
282 dwtmp += ptcb_desc->empkt_len[7]; 283 dwtmp += ptcb_desc->empkt_len[7];
283 } 284 }
284 SET_EARLYMODE_LEN3(virtualaddress, dwtmp); 285 set_earlymode_len3(virtualaddress, dwtmp);
285 if (ptcb_desc->empkt_num <= 9) { 286 if (ptcb_desc->empkt_num <= 9) {
286 dwtmp = ptcb_desc->empkt_len[8]; 287 dwtmp = ptcb_desc->empkt_len[8];
287 } else { 288 } else {
@@ -289,51 +290,52 @@ static void _rtl8723be_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
289 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4; 290 dwtmp += ((dwtmp % 4) ? (4 - dwtmp % 4) : 0) + 4;
290 dwtmp += ptcb_desc->empkt_len[9]; 291 dwtmp += ptcb_desc->empkt_len[9];
291 } 292 }
292 SET_EARLYMODE_LEN4(virtualaddress, dwtmp); 293 set_earlymode_len4(virtualaddress, dwtmp);
293} 294}
294 295
295bool rtl8723be_rx_query_desc(struct ieee80211_hw *hw, 296bool rtl8723be_rx_query_desc(struct ieee80211_hw *hw,
296 struct rtl_stats *status, 297 struct rtl_stats *status,
297 struct ieee80211_rx_status *rx_status, 298 struct ieee80211_rx_status *rx_status,
298 u8 *pdesc, struct sk_buff *skb) 299 u8 *pdesc8, struct sk_buff *skb)
299{ 300{
300 struct rtl_priv *rtlpriv = rtl_priv(hw); 301 struct rtl_priv *rtlpriv = rtl_priv(hw);
301 struct rx_fwinfo_8723be *p_drvinfo; 302 struct rx_fwinfo_8723be *p_drvinfo;
302 struct ieee80211_hdr *hdr; 303 struct ieee80211_hdr *hdr;
303 u8 wake_match; 304 u8 wake_match;
304 u32 phystatus = GET_RX_DESC_PHYST(pdesc); 305 __le32 *pdesc = (__le32 *)pdesc8;
306 u32 phystatus = get_rx_desc_physt(pdesc);
305 307
306 status->length = (u16)GET_RX_DESC_PKT_LEN(pdesc); 308 status->length = (u16)get_rx_desc_pkt_len(pdesc);
307 status->rx_drvinfo_size = (u8)GET_RX_DESC_DRV_INFO_SIZE(pdesc) * 309 status->rx_drvinfo_size = (u8)get_rx_desc_drv_info_size(pdesc) *
308 RX_DRV_INFO_SIZE_UNIT; 310 RX_DRV_INFO_SIZE_UNIT;
309 status->rx_bufshift = (u8)(GET_RX_DESC_SHIFT(pdesc) & 0x03); 311 status->rx_bufshift = (u8)(get_rx_desc_shift(pdesc) & 0x03);
310 status->icv = (u16) GET_RX_DESC_ICV(pdesc); 312 status->icv = (u16)get_rx_desc_icv(pdesc);
311 status->crc = (u16) GET_RX_DESC_CRC32(pdesc); 313 status->crc = (u16)get_rx_desc_crc32(pdesc);
312 status->hwerror = (status->crc | status->icv); 314 status->hwerror = (status->crc | status->icv);
313 status->decrypted = !GET_RX_DESC_SWDEC(pdesc); 315 status->decrypted = !get_rx_desc_swdec(pdesc);
314 status->rate = (u8)GET_RX_DESC_RXMCS(pdesc); 316 status->rate = (u8)get_rx_desc_rxmcs(pdesc);
315 status->shortpreamble = (u16)GET_RX_DESC_SPLCP(pdesc); 317 status->shortpreamble = (u16)get_rx_desc_splcp(pdesc);
316 status->isampdu = (bool)(GET_RX_DESC_PAGGR(pdesc) == 1); 318 status->isampdu = (bool)(get_rx_desc_paggr(pdesc) == 1);
317 status->isfirst_ampdu = (bool)(GET_RX_DESC_PAGGR(pdesc) == 1); 319 status->isfirst_ampdu = (bool)(get_rx_desc_paggr(pdesc) == 1);
318 status->timestamp_low = GET_RX_DESC_TSFL(pdesc); 320 status->timestamp_low = get_rx_desc_tsfl(pdesc);
319 status->rx_is40mhzpacket = (bool)GET_RX_DESC_BW(pdesc); 321 status->rx_is40mhzpacket = (bool)get_rx_desc_bw(pdesc);
320 status->bandwidth = (u8)GET_RX_DESC_BW(pdesc); 322 status->bandwidth = (u8)get_rx_desc_bw(pdesc);
321 status->macid = GET_RX_DESC_MACID(pdesc); 323 status->macid = get_rx_desc_macid(pdesc);
322 status->is_ht = (bool)GET_RX_DESC_RXHT(pdesc); 324 status->is_ht = (bool)get_rx_desc_rxht(pdesc);
323 325
324 status->is_cck = RX_HAL_IS_CCK_RATE(status->rate); 326 status->is_cck = RX_HAL_IS_CCK_RATE(status->rate);
325 327
326 if (GET_RX_STATUS_DESC_RPT_SEL(pdesc)) 328 if (get_rx_status_desc_rpt_sel(pdesc))
327 status->packet_report_type = C2H_PACKET; 329 status->packet_report_type = C2H_PACKET;
328 else 330 else
329 status->packet_report_type = NORMAL_RX; 331 status->packet_report_type = NORMAL_RX;
330 332
331 333
332 if (GET_RX_STATUS_DESC_PATTERN_MATCH(pdesc)) 334 if (get_rx_status_desc_pattern_match(pdesc))
333 wake_match = BIT(2); 335 wake_match = BIT(2);
334 else if (GET_RX_STATUS_DESC_MAGIC_MATCH(pdesc)) 336 else if (get_rx_status_desc_magic_match(pdesc))
335 wake_match = BIT(1); 337 wake_match = BIT(1);
336 else if (GET_RX_STATUS_DESC_UNICAST_MATCH(pdesc)) 338 else if (get_rx_status_desc_unicast_match(pdesc))
337 wake_match = BIT(0); 339 wake_match = BIT(0);
338 else 340 else
339 wake_match = 0; 341 wake_match = 0;
@@ -392,15 +394,15 @@ bool rtl8723be_rx_query_desc(struct ieee80211_hw *hw,
392 rx_status->signal = status->recvsignalpower + 10; 394 rx_status->signal = status->recvsignalpower + 10;
393 if (status->packet_report_type == TX_REPORT2) { 395 if (status->packet_report_type == TX_REPORT2) {
394 status->macid_valid_entry[0] = 396 status->macid_valid_entry[0] =
395 GET_RX_RPT2_DESC_MACID_VALID_1(pdesc); 397 get_rx_rpt2_desc_macid_valid_1(pdesc);
396 status->macid_valid_entry[1] = 398 status->macid_valid_entry[1] =
397 GET_RX_RPT2_DESC_MACID_VALID_2(pdesc); 399 get_rx_rpt2_desc_macid_valid_2(pdesc);
398 } 400 }
399 return true; 401 return true;
400} 402}
401 403
402void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw, 404void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
403 struct ieee80211_hdr *hdr, u8 *pdesc_tx, 405 struct ieee80211_hdr *hdr, u8 *pdesc8,
404 u8 *txbd, struct ieee80211_tx_info *info, 406 u8 *txbd, struct ieee80211_tx_info *info,
405 struct ieee80211_sta *sta, struct sk_buff *skb, 407 struct ieee80211_sta *sta, struct sk_buff *skb,
406 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc) 408 u8 hw_queue, struct rtl_tcb_desc *ptcb_desc)
@@ -410,7 +412,7 @@ void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
410 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 412 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
411 struct rtl_hal *rtlhal = rtl_hal(rtlpriv); 413 struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
412 struct rtlwifi_tx_info *tx_info = rtl_tx_skb_cb_info(skb); 414 struct rtlwifi_tx_info *tx_info = rtl_tx_skb_cb_info(skb);
413 u8 *pdesc = (u8 *)pdesc_tx; 415 __le32 *pdesc = (__le32 *)pdesc8;
414 u16 seq_number; 416 u16 seq_number;
415 __le16 fc = hdr->frame_control; 417 __le16 fc = hdr->frame_control;
416 unsigned int buf_len = 0; 418 unsigned int buf_len = 0;
@@ -446,78 +448,78 @@ void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
446 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "DMA mapping error\n"); 448 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "DMA mapping error\n");
447 return; 449 return;
448 } 450 }
449 CLEAR_PCI_TX_DESC_CONTENT(pdesc, sizeof(struct tx_desc_8723be)); 451 clear_pci_tx_desc_content(pdesc, sizeof(struct tx_desc_8723be));
450 if (ieee80211_is_nullfunc(fc) || ieee80211_is_ctl(fc)) { 452 if (ieee80211_is_nullfunc(fc) || ieee80211_is_ctl(fc)) {
451 firstseg = true; 453 firstseg = true;
452 lastseg = true; 454 lastseg = true;
453 } 455 }
454 if (firstseg) { 456 if (firstseg) {
455 if (rtlhal->earlymode_enable) { 457 if (rtlhal->earlymode_enable) {
456 SET_TX_DESC_PKT_OFFSET(pdesc, 1); 458 set_tx_desc_pkt_offset(pdesc, 1);
457 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN + 459 set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN +
458 EM_HDR_LEN); 460 EM_HDR_LEN);
459 if (ptcb_desc->empkt_num) { 461 if (ptcb_desc->empkt_num) {
460 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, 462 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE,
461 "Insert 8 byte.pTcb->EMPktNum:%d\n", 463 "Insert 8 byte.pTcb->EMPktNum:%d\n",
462 ptcb_desc->empkt_num); 464 ptcb_desc->empkt_num);
463 _rtl8723be_insert_emcontent(ptcb_desc, 465 _rtl8723be_insert_emcontent(ptcb_desc,
464 (u8 *)(skb->data)); 466 (__le32 *)(skb->data));
465 } 467 }
466 } else { 468 } else {
467 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN); 469 set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
468 } 470 }
469 471
470 472
471 /* ptcb_desc->use_driver_rate = true; */ 473 /* ptcb_desc->use_driver_rate = true; */
472 SET_TX_DESC_TX_RATE(pdesc, ptcb_desc->hw_rate); 474 set_tx_desc_tx_rate(pdesc, ptcb_desc->hw_rate);
473 if (ptcb_desc->hw_rate > DESC92C_RATEMCS0) 475 if (ptcb_desc->hw_rate > DESC92C_RATEMCS0)
474 short_gi = (ptcb_desc->use_shortgi) ? 1 : 0; 476 short_gi = (ptcb_desc->use_shortgi) ? 1 : 0;
475 else 477 else
476 short_gi = (ptcb_desc->use_shortpreamble) ? 1 : 0; 478 short_gi = (ptcb_desc->use_shortpreamble) ? 1 : 0;
477 479
478 SET_TX_DESC_DATA_SHORTGI(pdesc, short_gi); 480 set_tx_desc_data_shortgi(pdesc, short_gi);
479 481
480 if (info->flags & IEEE80211_TX_CTL_AMPDU) { 482 if (info->flags & IEEE80211_TX_CTL_AMPDU) {
481 SET_TX_DESC_AGG_ENABLE(pdesc, 1); 483 set_tx_desc_agg_enable(pdesc, 1);
482 SET_TX_DESC_MAX_AGG_NUM(pdesc, 0x14); 484 set_tx_desc_max_agg_num(pdesc, 0x14);
483 } 485 }
484 SET_TX_DESC_SEQ(pdesc, seq_number); 486 set_tx_desc_seq(pdesc, seq_number);
485 SET_TX_DESC_RTS_ENABLE(pdesc, ((ptcb_desc->rts_enable && 487 set_tx_desc_rts_enable(pdesc, ((ptcb_desc->rts_enable &&
486 !ptcb_desc->cts_enable) ? 488 !ptcb_desc->cts_enable) ?
487 1 : 0)); 489 1 : 0));
488 SET_TX_DESC_HW_RTS_ENABLE(pdesc, 0); 490 set_tx_desc_hw_rts_enable(pdesc, 0);
489 SET_TX_DESC_CTS2SELF(pdesc, ((ptcb_desc->cts_enable) ? 491 set_tx_desc_cts2self(pdesc, ((ptcb_desc->cts_enable) ?
490 1 : 0)); 492 1 : 0));
491 493
492 SET_TX_DESC_RTS_RATE(pdesc, ptcb_desc->rts_rate); 494 set_tx_desc_rts_rate(pdesc, ptcb_desc->rts_rate);
493 495
494 SET_TX_DESC_RTS_SC(pdesc, ptcb_desc->rts_sc); 496 set_tx_desc_rts_sc(pdesc, ptcb_desc->rts_sc);
495 SET_TX_DESC_RTS_SHORT(pdesc, 497 set_tx_desc_rts_short(pdesc,
496 ((ptcb_desc->rts_rate <= DESC92C_RATE54M) ? 498 ((ptcb_desc->rts_rate <= DESC92C_RATE54M) ?
497 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) : 499 (ptcb_desc->rts_use_shortpreamble ? 1 : 0) :
498 (ptcb_desc->rts_use_shortgi ? 1 : 0))); 500 (ptcb_desc->rts_use_shortgi ? 1 : 0)));
499 501
500 if (ptcb_desc->tx_enable_sw_calc_duration) 502 if (ptcb_desc->tx_enable_sw_calc_duration)
501 SET_TX_DESC_NAV_USE_HDR(pdesc, 1); 503 set_tx_desc_nav_use_hdr(pdesc, 1);
502 504
503 if (bw_40) { 505 if (bw_40) {
504 if (ptcb_desc->packet_bw == HT_CHANNEL_WIDTH_20_40) { 506 if (ptcb_desc->packet_bw == HT_CHANNEL_WIDTH_20_40) {
505 SET_TX_DESC_DATA_BW(pdesc, 1); 507 set_tx_desc_data_bw(pdesc, 1);
506 SET_TX_DESC_TX_SUB_CARRIER(pdesc, 3); 508 set_tx_desc_tx_sub_carrier(pdesc, 3);
507 } else { 509 } else {
508 SET_TX_DESC_DATA_BW(pdesc, 0); 510 set_tx_desc_data_bw(pdesc, 0);
509 SET_TX_DESC_TX_SUB_CARRIER(pdesc, mac->cur_40_prime_sc); 511 set_tx_desc_tx_sub_carrier(pdesc, mac->cur_40_prime_sc);
510 } 512 }
511 } else { 513 } else {
512 SET_TX_DESC_DATA_BW(pdesc, 0); 514 set_tx_desc_data_bw(pdesc, 0);
513 SET_TX_DESC_TX_SUB_CARRIER(pdesc, 0); 515 set_tx_desc_tx_sub_carrier(pdesc, 0);
514 } 516 }
515 517
516 SET_TX_DESC_LINIP(pdesc, 0); 518 set_tx_desc_linip(pdesc, 0);
517 SET_TX_DESC_PKT_SIZE(pdesc, (u16) skb_len); 519 set_tx_desc_pkt_size(pdesc, (u16)skb_len);
518 if (sta) { 520 if (sta) {
519 u8 ampdu_density = sta->ht_cap.ampdu_density; 521 u8 ampdu_density = sta->ht_cap.ampdu_density;
520 SET_TX_DESC_AMPDU_DENSITY(pdesc, ampdu_density); 522 set_tx_desc_ampdu_density(pdesc, ampdu_density);
521 } 523 }
522 if (info->control.hw_key) { 524 if (info->control.hw_key) {
523 struct ieee80211_key_conf *keyconf = 525 struct ieee80211_key_conf *keyconf =
@@ -526,23 +528,23 @@ void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
526 case WLAN_CIPHER_SUITE_WEP40: 528 case WLAN_CIPHER_SUITE_WEP40:
527 case WLAN_CIPHER_SUITE_WEP104: 529 case WLAN_CIPHER_SUITE_WEP104:
528 case WLAN_CIPHER_SUITE_TKIP: 530 case WLAN_CIPHER_SUITE_TKIP:
529 SET_TX_DESC_SEC_TYPE(pdesc, 0x1); 531 set_tx_desc_sec_type(pdesc, 0x1);
530 break; 532 break;
531 case WLAN_CIPHER_SUITE_CCMP: 533 case WLAN_CIPHER_SUITE_CCMP:
532 SET_TX_DESC_SEC_TYPE(pdesc, 0x3); 534 set_tx_desc_sec_type(pdesc, 0x3);
533 break; 535 break;
534 default: 536 default:
535 SET_TX_DESC_SEC_TYPE(pdesc, 0x0); 537 set_tx_desc_sec_type(pdesc, 0x0);
536 break; 538 break;
537 } 539 }
538 } 540 }
539 541
540 SET_TX_DESC_QUEUE_SEL(pdesc, fw_qsel); 542 set_tx_desc_queue_sel(pdesc, fw_qsel);
541 SET_TX_DESC_DATA_RATE_FB_LIMIT(pdesc, 0x1F); 543 set_tx_desc_data_rate_fb_limit(pdesc, 0x1F);
542 SET_TX_DESC_RTS_RATE_FB_LIMIT(pdesc, 0xF); 544 set_tx_desc_rts_rate_fb_limit(pdesc, 0xF);
543 SET_TX_DESC_DISABLE_FB(pdesc, ptcb_desc->disable_ratefallback ? 545 set_tx_desc_disable_fb(pdesc, ptcb_desc->disable_ratefallback ?
544 1 : 0); 546 1 : 0);
545 SET_TX_DESC_USE_RATE(pdesc, ptcb_desc->use_driver_rate ? 1 : 0); 547 set_tx_desc_use_rate(pdesc, ptcb_desc->use_driver_rate ? 1 : 0);
546 548
547 /* Set TxRate and RTSRate in TxDesc */ 549 /* Set TxRate and RTSRate in TxDesc */
548 /* This prevent Tx initial rate of new-coming packets */ 550 /* This prevent Tx initial rate of new-coming packets */
@@ -551,46 +553,47 @@ void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
551 if (mac->rdg_en) { 553 if (mac->rdg_en) {
552 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, 554 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE,
553 "Enable RDG function.\n"); 555 "Enable RDG function.\n");
554 SET_TX_DESC_RDG_ENABLE(pdesc, 1); 556 set_tx_desc_rdg_enable(pdesc, 1);
555 SET_TX_DESC_HTC(pdesc, 1); 557 set_tx_desc_htc(pdesc, 1);
556 } 558 }
557 } 559 }
558 /* tx report */ 560 /* tx report */
559 rtl_set_tx_report(ptcb_desc, pdesc, hw, tx_info); 561 rtl_set_tx_report(ptcb_desc, pdesc8, hw, tx_info);
560 } 562 }
561 563
562 SET_TX_DESC_FIRST_SEG(pdesc, (firstseg ? 1 : 0)); 564 set_tx_desc_first_seg(pdesc, (firstseg ? 1 : 0));
563 SET_TX_DESC_LAST_SEG(pdesc, (lastseg ? 1 : 0)); 565 set_tx_desc_last_seg(pdesc, (lastseg ? 1 : 0));
564 SET_TX_DESC_TX_BUFFER_SIZE(pdesc, (u16) buf_len); 566 set_tx_desc_tx_buffer_size(pdesc, (u16)buf_len);
565 SET_TX_DESC_TX_BUFFER_ADDRESS(pdesc, mapping); 567 set_tx_desc_tx_buffer_address(pdesc, mapping);
566 /* if (rtlpriv->dm.useramask) { */ 568 /* if (rtlpriv->dm.useramask) { */
567 if (1) { 569 if (1) {
568 SET_TX_DESC_RATE_ID(pdesc, ptcb_desc->ratr_index); 570 set_tx_desc_rate_id(pdesc, ptcb_desc->ratr_index);
569 SET_TX_DESC_MACID(pdesc, ptcb_desc->mac_id); 571 set_tx_desc_macid(pdesc, ptcb_desc->mac_id);
570 } else { 572 } else {
571 SET_TX_DESC_RATE_ID(pdesc, 0xC + ptcb_desc->ratr_index); 573 set_tx_desc_rate_id(pdesc, 0xC + ptcb_desc->ratr_index);
572 SET_TX_DESC_MACID(pdesc, ptcb_desc->mac_id); 574 set_tx_desc_macid(pdesc, ptcb_desc->mac_id);
573 } 575 }
574 if (!ieee80211_is_data_qos(fc)) { 576 if (!ieee80211_is_data_qos(fc)) {
575 SET_TX_DESC_HWSEQ_EN(pdesc, 1); 577 set_tx_desc_hwseq_en(pdesc, 1);
576 SET_TX_DESC_HWSEQ_SEL(pdesc, 0); 578 set_tx_desc_hwseq_sel(pdesc, 0);
577 } 579 }
578 SET_TX_DESC_MORE_FRAG(pdesc, (lastseg ? 0 : 1)); 580 set_tx_desc_more_frag(pdesc, (lastseg ? 0 : 1));
579 if (is_multicast_ether_addr(ieee80211_get_DA(hdr)) || 581 if (is_multicast_ether_addr(ieee80211_get_DA(hdr)) ||
580 is_broadcast_ether_addr(ieee80211_get_DA(hdr))) { 582 is_broadcast_ether_addr(ieee80211_get_DA(hdr))) {
581 SET_TX_DESC_BMC(pdesc, 1); 583 set_tx_desc_bmc(pdesc, 1);
582 } 584 }
583 585
584 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "\n"); 586 RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
585} 587}
586 588
587void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, 589void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
588 bool firstseg, bool lastseg, 590 bool firstseg, bool lastseg,
589 struct sk_buff *skb) 591 struct sk_buff *skb)
590{ 592{
591 struct rtl_priv *rtlpriv = rtl_priv(hw); 593 struct rtl_priv *rtlpriv = rtl_priv(hw);
592 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 594 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
593 u8 fw_queue = QSLT_BEACON; 595 u8 fw_queue = QSLT_BEACON;
596 __le32 *pdesc = (__le32 *)pdesc8;
594 597
595 dma_addr_t mapping = pci_map_single(rtlpci->pdev, 598 dma_addr_t mapping = pci_map_single(rtlpci->pdev,
596 skb->data, skb->len, 599 skb->data, skb->len,
@@ -601,51 +604,53 @@ void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
601 "DMA mapping error\n"); 604 "DMA mapping error\n");
602 return; 605 return;
603 } 606 }
604 CLEAR_PCI_TX_DESC_CONTENT(pdesc, TX_DESC_SIZE); 607 clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE);
605 608
606 SET_TX_DESC_OFFSET(pdesc, USB_HWDESC_HEADER_LEN); 609 set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
607 610
608 SET_TX_DESC_TX_RATE(pdesc, DESC92C_RATE1M); 611 set_tx_desc_tx_rate(pdesc, DESC92C_RATE1M);
609 612
610 SET_TX_DESC_SEQ(pdesc, 0); 613 set_tx_desc_seq(pdesc, 0);
611 614
612 SET_TX_DESC_LINIP(pdesc, 0); 615 set_tx_desc_linip(pdesc, 0);
613 616
614 SET_TX_DESC_QUEUE_SEL(pdesc, fw_queue); 617 set_tx_desc_queue_sel(pdesc, fw_queue);
615 618
616 SET_TX_DESC_FIRST_SEG(pdesc, 1); 619 set_tx_desc_first_seg(pdesc, 1);
617 SET_TX_DESC_LAST_SEG(pdesc, 1); 620 set_tx_desc_last_seg(pdesc, 1);
618 621
619 SET_TX_DESC_TX_BUFFER_SIZE(pdesc, (u16)(skb->len)); 622 set_tx_desc_tx_buffer_size(pdesc, (u16)(skb->len));
620 623
621 SET_TX_DESC_TX_BUFFER_ADDRESS(pdesc, mapping); 624 set_tx_desc_tx_buffer_address(pdesc, mapping);
622 625
623 SET_TX_DESC_RATE_ID(pdesc, 0); 626 set_tx_desc_rate_id(pdesc, 0);
624 SET_TX_DESC_MACID(pdesc, 0); 627 set_tx_desc_macid(pdesc, 0);
625 628
626 SET_TX_DESC_OWN(pdesc, 1); 629 set_tx_desc_own(pdesc, 1);
627 630
628 SET_TX_DESC_PKT_SIZE((u8 *)pdesc, (u16)(skb->len)); 631 set_tx_desc_pkt_size(pdesc, (u16)(skb->len));
629 632
630 SET_TX_DESC_FIRST_SEG(pdesc, 1); 633 set_tx_desc_first_seg(pdesc, 1);
631 SET_TX_DESC_LAST_SEG(pdesc, 1); 634 set_tx_desc_last_seg(pdesc, 1);
632 635
633 SET_TX_DESC_USE_RATE(pdesc, 1); 636 set_tx_desc_use_rate(pdesc, 1);
634 637
635 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD, 638 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
636 "H2C Tx Cmd Content\n", pdesc, TX_DESC_SIZE); 639 "H2C Tx Cmd Content\n", pdesc, TX_DESC_SIZE);
637} 640}
638 641
639void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc, 642void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc8,
640 bool istx, u8 desc_name, u8 *val) 643 bool istx, u8 desc_name, u8 *val)
641{ 644{
645 __le32 *pdesc = (__le32 *)pdesc8;
646
642 if (istx) { 647 if (istx) {
643 switch (desc_name) { 648 switch (desc_name) {
644 case HW_DESC_OWN: 649 case HW_DESC_OWN:
645 SET_TX_DESC_OWN(pdesc, 1); 650 set_tx_desc_own(pdesc, 1);
646 break; 651 break;
647 case HW_DESC_TX_NEXTDESC_ADDR: 652 case HW_DESC_TX_NEXTDESC_ADDR:
648 SET_TX_DESC_NEXT_DESC_ADDRESS(pdesc, *(u32 *)val); 653 set_tx_desc_next_desc_address(pdesc, *(u32 *)val);
649 break; 654 break;
650 default: 655 default:
651 WARN_ONCE(true, "rtl8723be: ERR txdesc :%d not processed\n", 656 WARN_ONCE(true, "rtl8723be: ERR txdesc :%d not processed\n",
@@ -655,16 +660,16 @@ void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
655 } else { 660 } else {
656 switch (desc_name) { 661 switch (desc_name) {
657 case HW_DESC_RXOWN: 662 case HW_DESC_RXOWN:
658 SET_RX_DESC_OWN(pdesc, 1); 663 set_rx_desc_own(pdesc, 1);
659 break; 664 break;
660 case HW_DESC_RXBUFF_ADDR: 665 case HW_DESC_RXBUFF_ADDR:
661 SET_RX_DESC_BUFF_ADDR(pdesc, *(u32 *)val); 666 set_rx_desc_buff_addr(pdesc, *(u32 *)val);
662 break; 667 break;
663 case HW_DESC_RXPKT_LEN: 668 case HW_DESC_RXPKT_LEN:
664 SET_RX_DESC_PKT_LEN(pdesc, *(u32 *)val); 669 set_rx_desc_pkt_len(pdesc, *(u32 *)val);
665 break; 670 break;
666 case HW_DESC_RXERO: 671 case HW_DESC_RXERO:
667 SET_RX_DESC_EOR(pdesc, 1); 672 set_rx_desc_eor(pdesc, 1);
668 break; 673 break;
669 default: 674 default:
670 WARN_ONCE(true, "rtl8723be: ERR rxdesc :%d not process\n", 675 WARN_ONCE(true, "rtl8723be: ERR rxdesc :%d not process\n",
@@ -675,17 +680,18 @@ void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
675} 680}
676 681
677u64 rtl8723be_get_desc(struct ieee80211_hw *hw, 682u64 rtl8723be_get_desc(struct ieee80211_hw *hw,
678 u8 *pdesc, bool istx, u8 desc_name) 683 u8 *pdesc8, bool istx, u8 desc_name)
679{ 684{
680 u32 ret = 0; 685 u32 ret = 0;
686 __le32 *pdesc = (__le32 *)pdesc8;
681 687
682 if (istx) { 688 if (istx) {
683 switch (desc_name) { 689 switch (desc_name) {
684 case HW_DESC_OWN: 690 case HW_DESC_OWN:
685 ret = GET_TX_DESC_OWN(pdesc); 691 ret = get_tx_desc_own(pdesc);
686 break; 692 break;
687 case HW_DESC_TXBUFF_ADDR: 693 case HW_DESC_TXBUFF_ADDR:
688 ret = GET_TX_DESC_TX_BUFFER_ADDRESS(pdesc); 694 ret = get_tx_desc_tx_buffer_address(pdesc);
689 break; 695 break;
690 default: 696 default:
691 WARN_ONCE(true, "rtl8723be: ERR txdesc :%d not process\n", 697 WARN_ONCE(true, "rtl8723be: ERR txdesc :%d not process\n",
@@ -695,13 +701,13 @@ u64 rtl8723be_get_desc(struct ieee80211_hw *hw,
695 } else { 701 } else {
696 switch (desc_name) { 702 switch (desc_name) {
697 case HW_DESC_OWN: 703 case HW_DESC_OWN:
698 ret = GET_RX_DESC_OWN(pdesc); 704 ret = get_rx_desc_own(pdesc);
699 break; 705 break;
700 case HW_DESC_RXPKT_LEN: 706 case HW_DESC_RXPKT_LEN:
701 ret = GET_RX_DESC_PKT_LEN(pdesc); 707 ret = get_rx_desc_pkt_len(pdesc);
702 break; 708 break;
703 case HW_DESC_RXBUFF_ADDR: 709 case HW_DESC_RXBUFF_ADDR:
704 ret = GET_RX_DESC_BUFF_ADDR(pdesc); 710 ret = get_rx_desc_buff_addr(pdesc);
705 break; 711 break;
706 default: 712 default:
707 WARN_ONCE(true, "rtl8723be: ERR rxdesc :%d not processed\n", 713 WARN_ONCE(true, "rtl8723be: ERR rxdesc :%d not processed\n",
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h
index 11e75a4e68bd..174aca20c7e1 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h
@@ -14,351 +14,385 @@
14#define USB_HWDESC_HEADER_LEN 40 14#define USB_HWDESC_HEADER_LEN 40
15#define CRCLENGTH 4 15#define CRCLENGTH 4
16 16
17#define SET_TX_DESC_PKT_SIZE(__pdesc, __val) \ 17static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
18 SET_BITS_TO_LE_4BYTE(__pdesc, 0, 16, __val) 18{
19#define SET_TX_DESC_OFFSET(__pdesc, __val) \ 19 le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
20 SET_BITS_TO_LE_4BYTE(__pdesc, 16, 8, __val) 20}
21#define SET_TX_DESC_BMC(__pdesc, __val) \ 21
22 SET_BITS_TO_LE_4BYTE(__pdesc, 24, 1, __val) 22static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
23#define SET_TX_DESC_HTC(__pdesc, __val) \ 23{
24 SET_BITS_TO_LE_4BYTE(__pdesc, 25, 1, __val) 24 le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
25#define SET_TX_DESC_LAST_SEG(__pdesc, __val) \ 25}
26 SET_BITS_TO_LE_4BYTE(__pdesc, 26, 1, __val) 26
27#define SET_TX_DESC_FIRST_SEG(__pdesc, __val) \ 27static inline void set_tx_desc_bmc(__le32 *__pdesc, u32 __val)
28 SET_BITS_TO_LE_4BYTE(__pdesc, 27, 1, __val) 28{
29#define SET_TX_DESC_LINIP(__pdesc, __val) \ 29 le32p_replace_bits(__pdesc, __val, BIT(24));
30 SET_BITS_TO_LE_4BYTE(__pdesc, 28, 1, __val) 30}
31#define SET_TX_DESC_NO_ACM(__pdesc, __val) \ 31
32 SET_BITS_TO_LE_4BYTE(__pdesc, 29, 1, __val) 32static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val)
33#define SET_TX_DESC_GF(__pdesc, __val) \ 33{
34 SET_BITS_TO_LE_4BYTE(__pdesc, 30, 1, __val) 34 le32p_replace_bits(__pdesc, __val, BIT(25));
35#define SET_TX_DESC_OWN(__pdesc, __val) \ 35}
36 SET_BITS_TO_LE_4BYTE(__pdesc, 31, 1, __val) 36
37 37static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
38#define GET_TX_DESC_PKT_SIZE(__pdesc) \ 38{
39 LE_BITS_TO_4BYTE(__pdesc, 0, 16) 39 le32p_replace_bits(__pdesc, __val, BIT(26));
40#define GET_TX_DESC_OFFSET(__pdesc) \ 40}
41 LE_BITS_TO_4BYTE(__pdesc, 16, 8) 41
42#define GET_TX_DESC_BMC(__pdesc) \ 42static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
43 LE_BITS_TO_4BYTE(__pdesc, 24, 1) 43{
44#define GET_TX_DESC_HTC(__pdesc) \ 44 le32p_replace_bits(__pdesc, __val, BIT(27));
45 LE_BITS_TO_4BYTE(__pdesc, 25, 1) 45}
46#define GET_TX_DESC_LAST_SEG(__pdesc) \ 46
47 LE_BITS_TO_4BYTE(__pdesc, 26, 1) 47static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
48#define GET_TX_DESC_FIRST_SEG(__pdesc) \ 48{
49 LE_BITS_TO_4BYTE(__pdesc, 27, 1) 49 le32p_replace_bits(__pdesc, __val, BIT(28));
50#define GET_TX_DESC_LINIP(__pdesc) \ 50}
51 LE_BITS_TO_4BYTE(__pdesc, 28, 1) 51
52#define GET_TX_DESC_NO_ACM(__pdesc) \ 52static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
53 LE_BITS_TO_4BYTE(__pdesc, 29, 1) 53{
54#define GET_TX_DESC_GF(__pdesc) \ 54 le32p_replace_bits(__pdesc, __val, BIT(31));
55 LE_BITS_TO_4BYTE(__pdesc, 30, 1) 55}
56#define GET_TX_DESC_OWN(__pdesc) \ 56
57 LE_BITS_TO_4BYTE(__pdesc, 31, 1) 57static inline u32 get_tx_desc_own(__le32 *__pdesc)
58 58{
59#define SET_TX_DESC_MACID(__pdesc, __val) \ 59 return le32_get_bits(*__pdesc, BIT(31));
60 SET_BITS_TO_LE_4BYTE(__pdesc+4, 0, 7, __val) 60}
61#define SET_TX_DESC_QUEUE_SEL(__pdesc, __val) \ 61
62 SET_BITS_TO_LE_4BYTE(__pdesc+4, 8, 5, __val) 62static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
63#define SET_TX_DESC_RDG_NAV_EXT(__pdesc, __val) \ 63{
64 SET_BITS_TO_LE_4BYTE(__pdesc+4, 13, 1, __val) 64 le32p_replace_bits((__pdesc + 1), __val, GENMASK(6, 0));
65#define SET_TX_DESC_LSIG_TXOP_EN(__pdesc, __val) \ 65}
66 SET_BITS_TO_LE_4BYTE(__pdesc+4, 14, 1, __val) 66
67#define SET_TX_DESC_PIFS(__pdesc, __val) \ 67static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
68 SET_BITS_TO_LE_4BYTE(__pdesc+4, 15, 1, __val) 68{
69#define SET_TX_DESC_RATE_ID(__pdesc, __val) \ 69 le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8));
70 SET_BITS_TO_LE_4BYTE(__pdesc+4, 16, 5, __val) 70}
71#define SET_TX_DESC_EN_DESC_ID(__pdesc, __val) \ 71
72 SET_BITS_TO_LE_4BYTE(__pdesc+4, 21, 1, __val) 72static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val)
73#define SET_TX_DESC_SEC_TYPE(__pdesc, __val) \ 73{
74 SET_BITS_TO_LE_4BYTE(__pdesc+4, 22, 2, __val) 74 le32p_replace_bits((__pdesc + 1), __val, GENMASK(20, 16));
75#define SET_TX_DESC_PKT_OFFSET(__pdesc, __val) \ 75}
76 SET_BITS_TO_LE_4BYTE(__pdesc+4, 24, 5, __val) 76
77 77static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
78 78{
79#define SET_TX_DESC_PAID(__pdesc, __val) \ 79 le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22));
80 SET_BITS_TO_LE_4BYTE(__pdesc+8, 0, 9, __val) 80}
81#define SET_TX_DESC_CCA_RTS(__pdesc, __val) \ 81
82 SET_BITS_TO_LE_4BYTE(__pdesc+8, 10, 2, __val) 82static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val)
83#define SET_TX_DESC_AGG_ENABLE(__pdesc, __val) \ 83{
84 SET_BITS_TO_LE_4BYTE(__pdesc+8, 12, 1, __val) 84 le32p_replace_bits((__pdesc + 1), __val, GENMASK(28, 24));
85#define SET_TX_DESC_RDG_ENABLE(__pdesc, __val) \ 85}
86 SET_BITS_TO_LE_4BYTE(__pdesc+8, 13, 1, __val) 86
87#define SET_TX_DESC_BAR_RTY_TH(__pdesc, __val) \ 87static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val)
88 SET_BITS_TO_LE_4BYTE((__pdesc) + 8, 14, 2, __val) 88{
89#define SET_TX_DESC_AGG_BREAK(__pdesc, __val) \ 89 le32p_replace_bits((__pdesc + 2), __val, BIT(12));
90 SET_BITS_TO_LE_4BYTE(__pdesc+8, 16, 1, __val) 90}
91#define SET_TX_DESC_MORE_FRAG(__pdesc, __val) \ 91
92 SET_BITS_TO_LE_4BYTE(__pdesc+8, 17, 1, __val) 92static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val)
93#define SET_TX_DESC_RAW(__pdesc, __val) \ 93{
94 SET_BITS_TO_LE_4BYTE(__pdesc+8, 18, 1, __val) 94 le32p_replace_bits((__pdesc + 2), __val, BIT(13));
95#define SET_TX_DESC_SPE_RPT(__pdesc, __val) \ 95}
96 SET_BITS_TO_LE_4BYTE((__pdesc) + 8, 19, 1, __val) 96
97#define SET_TX_DESC_AMPDU_DENSITY(__pdesc, __val) \ 97static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val)
98 SET_BITS_TO_LE_4BYTE(__pdesc+8, 20, 3, __val) 98{
99#define SET_TX_DESC_BT_INT(__pdesc, __val) \ 99 le32p_replace_bits((__pdesc + 2), __val, BIT(17));
100 SET_BITS_TO_LE_4BYTE(__pdesc+8, 23, 1, __val) 100}
101#define SET_TX_DESC_GID(__pdesc, __val) \ 101
102 SET_BITS_TO_LE_4BYTE(__pdesc+8, 24, 6, __val) 102static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val)
103 103{
104 104 le32p_replace_bits((__pdesc + 2), __val, GENMASK(22, 20));
105#define SET_TX_DESC_WHEADER_LEN(__pdesc, __val) \ 105}
106 SET_BITS_TO_LE_4BYTE(__pdesc+12, 0, 4, __val) 106
107#define SET_TX_DESC_CHK_EN(__pdesc, __val) \ 107static inline void set_tx_desc_hwseq_sel(__le32 *__pdesc, u32 __val)
108 SET_BITS_TO_LE_4BYTE(__pdesc+12, 4, 1, __val) 108{
109#define SET_TX_DESC_EARLY_MODE(__pdesc, __val) \ 109 le32p_replace_bits((__pdesc + 3), __val, GENMASK(7, 6));
110 SET_BITS_TO_LE_4BYTE(__pdesc+12, 5, 1, __val) 110}
111#define SET_TX_DESC_HWSEQ_SEL(__pdesc, __val) \ 111
112 SET_BITS_TO_LE_4BYTE(__pdesc+12, 6, 2, __val) 112static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val)
113#define SET_TX_DESC_USE_RATE(__pdesc, __val) \ 113{
114 SET_BITS_TO_LE_4BYTE(__pdesc+12, 8, 1, __val) 114 le32p_replace_bits((__pdesc + 3), __val, BIT(8));
115#define SET_TX_DESC_DISABLE_RTS_FB(__pdesc, __val) \ 115}
116 SET_BITS_TO_LE_4BYTE(__pdesc+12, 9, 1, __val) 116
117#define SET_TX_DESC_DISABLE_FB(__pdesc, __val) \ 117static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val)
118 SET_BITS_TO_LE_4BYTE(__pdesc+12, 10, 1, __val) 118{
119#define SET_TX_DESC_CTS2SELF(__pdesc, __val) \ 119 le32p_replace_bits((__pdesc + 3), __val, BIT(10));
120 SET_BITS_TO_LE_4BYTE(__pdesc+12, 11, 1, __val) 120}
121#define SET_TX_DESC_RTS_ENABLE(__pdesc, __val) \ 121
122 SET_BITS_TO_LE_4BYTE(__pdesc+12, 12, 1, __val) 122static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val)
123#define SET_TX_DESC_HW_RTS_ENABLE(__pdesc, __val) \ 123{
124 SET_BITS_TO_LE_4BYTE(__pdesc+12, 13, 1, __val) 124 le32p_replace_bits((__pdesc + 3), __val, BIT(11));
125#define SET_TX_DESC_NAV_USE_HDR(__pdesc, __val) \ 125}
126 SET_BITS_TO_LE_4BYTE(__pdesc+12, 15, 1, __val) 126
127#define SET_TX_DESC_USE_MAX_LEN(__pdesc, __val) \ 127static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
128 SET_BITS_TO_LE_4BYTE(__pdesc+12, 16, 1, __val) 128{
129#define SET_TX_DESC_MAX_AGG_NUM(__pdesc, __val) \ 129 le32p_replace_bits((__pdesc + 3), __val, BIT(12));
130 SET_BITS_TO_LE_4BYTE(__pdesc+12, 17, 5, __val) 130}
131#define SET_TX_DESC_NDPA(__pdesc, __val) \ 131
132 SET_BITS_TO_LE_4BYTE(__pdesc+12, 22, 2, __val) 132static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val)
133#define SET_TX_DESC_AMPDU_MAX_TIME(__pdesc, __val) \ 133{
134 SET_BITS_TO_LE_4BYTE(__pdesc+12, 24, 8, __val) 134 le32p_replace_bits((__pdesc + 3), __val, BIT(13));
135 135}
136 136
137#define SET_TX_DESC_TX_RATE(__pdesc, __val) \ 137static inline void set_tx_desc_nav_use_hdr(__le32 *__pdesc, u32 __val)
138 SET_BITS_TO_LE_4BYTE(__pdesc+16, 0, 7, __val) 138{
139#define SET_TX_DESC_DATA_RATE_FB_LIMIT(__pdesc, __val) \ 139 le32p_replace_bits((__pdesc + 3), __val, BIT(15));
140 SET_BITS_TO_LE_4BYTE(__pdesc+16, 8, 5, __val) 140}
141#define SET_TX_DESC_RTS_RATE_FB_LIMIT(__pdesc, __val) \ 141
142 SET_BITS_TO_LE_4BYTE(__pdesc+16, 13, 4, __val) 142static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val)
143#define SET_TX_DESC_RETRY_LIMIT_ENABLE(__pdesc, __val) \ 143{
144 SET_BITS_TO_LE_4BYTE(__pdesc+16, 17, 1, __val) 144 le32p_replace_bits((__pdesc + 3), __val, GENMASK(21, 17));
145#define SET_TX_DESC_DATA_RETRY_LIMIT(__pdesc, __val) \ 145}
146 SET_BITS_TO_LE_4BYTE(__pdesc+16, 18, 6, __val) 146
147#define SET_TX_DESC_RTS_RATE(__pdesc, __val) \ 147static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
148 SET_BITS_TO_LE_4BYTE(__pdesc+16, 24, 5, __val) 148{
149 149 le32p_replace_bits((__pdesc + 4), __val, GENMASK(6, 0));
150 150}
151#define SET_TX_DESC_TX_SUB_CARRIER(__pdesc, __val) \ 151
152 SET_BITS_TO_LE_4BYTE(__pdesc+20, 0, 4, __val) 152static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
153#define SET_TX_DESC_DATA_SHORTGI(__pdesc, __val) \ 153{
154 SET_BITS_TO_LE_4BYTE(__pdesc+20, 4, 1, __val) 154 le32p_replace_bits((__pdesc + 4), __val, GENMASK(12, 8));
155#define SET_TX_DESC_DATA_BW(__pdesc, __val) \ 155}
156 SET_BITS_TO_LE_4BYTE(__pdesc+20, 5, 2, __val) 156
157#define SET_TX_DESC_DATA_LDPC(__pdesc, __val) \ 157static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val)
158 SET_BITS_TO_LE_4BYTE(__pdesc+20, 7, 1, __val) 158{
159#define SET_TX_DESC_DATA_STBC(__pdesc, __val) \ 159 le32p_replace_bits((__pdesc + 4), __val, GENMASK(16, 13));
160 SET_BITS_TO_LE_4BYTE(__pdesc+20, 8, 2, __val) 160}
161#define SET_TX_DESC_CTROL_STBC(__pdesc, __val) \ 161
162 SET_BITS_TO_LE_4BYTE(__pdesc+20, 10, 2, __val) 162static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
163#define SET_TX_DESC_RTS_SHORT(__pdesc, __val) \ 163{
164 SET_BITS_TO_LE_4BYTE(__pdesc+20, 12, 1, __val) 164 le32p_replace_bits((__pdesc + 4), __val, GENMASK(28, 24));
165#define SET_TX_DESC_RTS_SC(__pdesc, __val) \ 165}
166 SET_BITS_TO_LE_4BYTE(__pdesc+20, 13, 4, __val) 166
167 167static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
168#define SET_TX_DESC_SW_DEFINE(__pdesc, __val) \ 168{
169 SET_BITS_TO_LE_4BYTE((__pdesc) + 24, 0, 12, __val) 169 le32p_replace_bits((__pdesc + 5), __val, GENMASK(3, 0));
170#define SET_TX_DESC_MBSSID(__pdesc, __val) \ 170}
171 SET_BITS_TO_LE_4BYTE((__pdesc) + 24, 12, 4, __val) 171
172#define SET_TX_DESC_ANTSEL_A(__pdesc, __val) \ 172static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
173 SET_BITS_TO_LE_4BYTE((__pdesc) + 24, 16, 3, __val) 173{
174#define SET_TX_DESC_ANTSEL_B(__pdesc, __val) \ 174 le32p_replace_bits((__pdesc + 5), __val, BIT(4));
175 SET_BITS_TO_LE_4BYTE((__pdesc) + 24, 19, 3, __val) 175}
176#define SET_TX_DESC_ANTSEL_C(__pdesc, __val) \ 176
177 SET_BITS_TO_LE_4BYTE((__pdesc) + 24, 22, 3, __val) 177static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val)
178#define SET_TX_DESC_ANTSEL_D(__pdesc, __val) \ 178{
179 SET_BITS_TO_LE_4BYTE((__pdesc) + 24, 25, 3, __val) 179 le32p_replace_bits((__pdesc + 5), __val, GENMASK(6, 5));
180 180}
181#define SET_TX_DESC_TX_BUFFER_SIZE(__pdesc, __val) \ 181
182 SET_BITS_TO_LE_4BYTE(__pdesc+28, 0, 16, __val) 182static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
183 183{
184#define GET_TX_DESC_TX_BUFFER_SIZE(__pdesc) \ 184 le32p_replace_bits((__pdesc + 5), __val, BIT(12));
185 LE_BITS_TO_4BYTE(__pdesc+28, 0, 16) 185}
186 186
187#define SET_TX_DESC_HWSEQ_EN(__pdesc, __val) \ 187static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val)
188 SET_BITS_TO_LE_4BYTE(__pdesc+32, 15, 1, __val) 188{
189 189 le32p_replace_bits((__pdesc + 5), __val, GENMASK(16, 13));
190#define SET_TX_DESC_SEQ(__pdesc, __val) \ 190}
191 SET_BITS_TO_LE_4BYTE(__pdesc+36, 12, 12, __val) 191
192 192static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
193#define SET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc, __val) \ 193{
194 SET_BITS_TO_LE_4BYTE(__pdesc+40, 0, 32, __val) 194 le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0));
195 195}
196#define GET_TX_DESC_TX_BUFFER_ADDRESS(__pdesc) \ 196
197 LE_BITS_TO_4BYTE(__pdesc+40, 0, 32) 197static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val)
198 198{
199 199 le32p_replace_bits((__pdesc + 8), __val, BIT(15));
200#define SET_TX_DESC_NEXT_DESC_ADDRESS(__pdesc, __val) \ 200}
201 SET_BITS_TO_LE_4BYTE(__pdesc+48, 0, 32, __val) 201
202 202static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
203#define GET_TX_DESC_NEXT_DESC_ADDRESS(__pdesc) \ 203{
204 LE_BITS_TO_4BYTE(__pdesc+48, 0, 32) 204 le32p_replace_bits((__pdesc + 9), __val, GENMASK(23, 12));
205 205}
206#define GET_RX_DESC_PKT_LEN(__pdesc) \ 206
207 LE_BITS_TO_4BYTE(__pdesc, 0, 14) 207static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
208#define GET_RX_DESC_CRC32(__pdesc) \ 208{
209 LE_BITS_TO_4BYTE(__pdesc, 14, 1) 209 *(__pdesc + 10) = cpu_to_le32(__val);
210#define GET_RX_DESC_ICV(__pdesc) \ 210}
211 LE_BITS_TO_4BYTE(__pdesc, 15, 1) 211
212#define GET_RX_DESC_DRV_INFO_SIZE(__pdesc) \ 212static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
213 LE_BITS_TO_4BYTE(__pdesc, 16, 4) 213{
214#define GET_RX_DESC_SECURITY(__pdesc) \ 214 return le32_to_cpu(*((__pdesc + 10)));
215 LE_BITS_TO_4BYTE(__pdesc, 20, 3) 215}
216#define GET_RX_DESC_QOS(__pdesc) \ 216
217 LE_BITS_TO_4BYTE(__pdesc, 23, 1) 217static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
218#define GET_RX_DESC_SHIFT(__pdesc) \ 218{
219 LE_BITS_TO_4BYTE(__pdesc, 24, 2) 219 *(__pdesc + 12) = cpu_to_le32(__val);
220#define GET_RX_DESC_PHYST(__pdesc) \ 220}
221 LE_BITS_TO_4BYTE(__pdesc, 26, 1) 221
222#define GET_RX_DESC_SWDEC(__pdesc) \ 222static inline u32 get_rx_desc_pkt_len(__le32 *__pdesc)
223 LE_BITS_TO_4BYTE(__pdesc, 27, 1) 223{
224#define GET_RX_DESC_LS(__pdesc) \ 224 return le32_get_bits(*__pdesc, GENMASK(13, 0));
225 LE_BITS_TO_4BYTE(__pdesc, 28, 1) 225}
226#define GET_RX_DESC_FS(__pdesc) \ 226
227 LE_BITS_TO_4BYTE(__pdesc, 29, 1) 227static inline u32 get_rx_desc_crc32(__le32 *__pdesc)
228#define GET_RX_DESC_EOR(__pdesc) \ 228{
229 LE_BITS_TO_4BYTE(__pdesc, 30, 1) 229 return le32_get_bits(*__pdesc, BIT(14));
230#define GET_RX_DESC_OWN(__pdesc) \ 230}
231 LE_BITS_TO_4BYTE(__pdesc, 31, 1) 231
232 232static inline u32 get_rx_desc_icv(__le32 *__pdesc)
233#define SET_RX_DESC_PKT_LEN(__pdesc, __val) \ 233{
234 SET_BITS_TO_LE_4BYTE(__pdesc, 0, 14, __val) 234 return le32_get_bits(*__pdesc, BIT(15));
235#define SET_RX_DESC_EOR(__pdesc, __val) \ 235}
236 SET_BITS_TO_LE_4BYTE(__pdesc, 30, 1, __val) 236
237#define SET_RX_DESC_OWN(__pdesc, __val) \ 237static inline u32 get_rx_desc_drv_info_size(__le32 *__pdesc)
238 SET_BITS_TO_LE_4BYTE(__pdesc, 31, 1, __val) 238{
239 239 return le32_get_bits(*__pdesc, GENMASK(19, 16));
240#define GET_RX_DESC_MACID(__pdesc) \ 240}
241 LE_BITS_TO_4BYTE(__pdesc+4, 0, 7) 241
242#define GET_RX_DESC_TID(__pdesc) \ 242static inline u32 get_rx_desc_shift(__le32 *__pdesc)
243 LE_BITS_TO_4BYTE(__pdesc+4, 8, 4) 243{
244#define GET_RX_DESC_AMSDU(__pdesc) \ 244 return le32_get_bits(*__pdesc, GENMASK(25, 24));
245 LE_BITS_TO_4BYTE(__pdesc+4, 13, 1) 245}
246#define GET_RX_STATUS_DESC_RXID_MATCH(__pdesc) \ 246
247 LE_BITS_TO_4BYTE(__pdesc+4, 14, 1) 247static inline u32 get_rx_desc_physt(__le32 *__pdesc)
248#define GET_RX_DESC_PAGGR(__pdesc) \ 248{
249 LE_BITS_TO_4BYTE(__pdesc+4, 15, 1) 249 return le32_get_bits(*__pdesc, BIT(26));
250#define GET_RX_DESC_A1_FIT(__pdesc) \ 250}
251 LE_BITS_TO_4BYTE(__pdesc+4, 16, 4) 251
252#define GET_RX_DESC_CHKERR(__pdesc) \ 252static inline u32 get_rx_desc_swdec(__le32 *__pdesc)
253 LE_BITS_TO_4BYTE(__pdesc+4, 20, 1) 253{
254#define GET_RX_DESC_IPVER(__pdesc) \ 254 return le32_get_bits(*__pdesc, BIT(27));
255 LE_BITS_TO_4BYTE(__pdesc+4, 21, 1) 255}
256#define GET_RX_STATUS_DESC_IS_TCPUDP(__pdesc) \ 256
257 LE_BITS_TO_4BYTE(__pdesc+4, 22, 1) 257static inline u32 get_rx_desc_own(__le32 *__pdesc)
258#define GET_RX_STATUS_DESC_CHK_VLD(__pdesc) \ 258{
259 LE_BITS_TO_4BYTE(__pdesc+4, 23, 1) 259 return le32_get_bits(*__pdesc, BIT(31));
260#define GET_RX_DESC_PAM(__pdesc) \ 260}
261 LE_BITS_TO_4BYTE(__pdesc+4, 24, 1) 261
262#define GET_RX_DESC_PWR(__pdesc) \ 262static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val)
263 LE_BITS_TO_4BYTE(__pdesc+4, 25, 1) 263{
264#define GET_RX_DESC_MD(__pdesc) \ 264 le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
265 LE_BITS_TO_4BYTE(__pdesc+4, 26, 1) 265}
266#define GET_RX_DESC_MF(__pdesc) \ 266
267 LE_BITS_TO_4BYTE(__pdesc+4, 27, 1) 267static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val)
268#define GET_RX_DESC_TYPE(__pdesc) \ 268{
269 LE_BITS_TO_4BYTE(__pdesc+4, 28, 2) 269 le32p_replace_bits(__pdesc, __val, BIT(30));
270#define GET_RX_DESC_MC(__pdesc) \ 270}
271 LE_BITS_TO_4BYTE(__pdesc+4, 30, 1) 271
272#define GET_RX_DESC_BC(__pdesc) \ 272static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val)
273 LE_BITS_TO_4BYTE(__pdesc+4, 31, 1) 273{
274 274 le32p_replace_bits(__pdesc, __val, BIT(31));
275 275}
276#define GET_RX_DESC_SEQ(__pdesc) \ 276
277 LE_BITS_TO_4BYTE(__pdesc+8, 0, 12) 277static inline u32 get_rx_desc_macid(__le32 *__pdesc)
278#define GET_RX_DESC_FRAG(__pdesc) \ 278{
279 LE_BITS_TO_4BYTE(__pdesc+8, 12, 4) 279 return le32_get_bits(*(__pdesc + 1), GENMASK(6, 0));
280#define GET_RX_STATUS_DESC_RX_IS_QOS(__pdesc) \ 280}
281 LE_BITS_TO_4BYTE(__pdesc+8, 16, 1) 281
282#define GET_RX_STATUS_DESC_WLANHD_IV_LEN(__pdesc) \ 282static inline u32 get_rx_desc_paggr(__le32 *__pdesc)
283 LE_BITS_TO_4BYTE(__pdesc+8, 18, 6) 283{
284#define GET_RX_STATUS_DESC_RPT_SEL(__pdesc) \ 284 return le32_get_bits(*(__pdesc + 1), BIT(15));
285 LE_BITS_TO_4BYTE(__pdesc+8, 28, 1) 285}
286 286
287 287static inline u32 get_rx_status_desc_rpt_sel(__le32 *__pdesc)
288#define GET_RX_DESC_RXMCS(__pdesc) \ 288{
289 LE_BITS_TO_4BYTE(__pdesc+12, 0, 7) 289 return le32_get_bits(*(__pdesc + 2), BIT(28));
290#define GET_RX_DESC_RXHT(__pdesc) \ 290}
291 LE_BITS_TO_4BYTE(__pdesc+12, 6, 1) 291
292#define GET_RX_STATUS_DESC_RX_GF(__pdesc) \ 292static inline u32 get_rx_desc_rxmcs(__le32 *__pdesc)
293 LE_BITS_TO_4BYTE(__pdesc+12, 7, 1) 293{
294#define GET_RX_DESC_HTC(__pdesc) \ 294 return le32_get_bits(*(__pdesc + 3), GENMASK(6, 0));
295 LE_BITS_TO_4BYTE(__pdesc+12, 10, 1) 295}
296#define GET_RX_STATUS_DESC_EOSP(__pdesc) \ 296
297 LE_BITS_TO_4BYTE(__pdesc+12, 11, 1) 297static inline u32 get_rx_desc_rxht(__le32 *__pdesc)
298#define GET_RX_STATUS_DESC_BSSID_FIT(__pdesc) \ 298{
299 LE_BITS_TO_4BYTE(__pdesc+12, 12, 2) 299 return le32_get_bits(*(__pdesc + 3), BIT(6));
300 300}
301#define GET_RX_STATUS_DESC_PATTERN_MATCH(__pdesc) \ 301
302 LE_BITS_TO_4BYTE(__pdesc+12, 29, 1) 302static inline u32 get_rx_status_desc_pattern_match(__le32 *__pdesc)
303#define GET_RX_STATUS_DESC_UNICAST_MATCH(__pdesc) \ 303{
304 LE_BITS_TO_4BYTE(__pdesc+12, 30, 1) 304 return le32_get_bits(*(__pdesc + 3), BIT(29));
305#define GET_RX_STATUS_DESC_MAGIC_MATCH(__pdesc) \ 305}
306 LE_BITS_TO_4BYTE(__pdesc+12, 31, 1) 306
307 307static inline u32 get_rx_status_desc_unicast_match(__le32 *__pdesc)
308#define GET_RX_DESC_SPLCP(__pdesc) \ 308{
309 LE_BITS_TO_4BYTE(__pdesc+16, 0, 1) 309 return le32_get_bits(*(__pdesc + 3), BIT(30));
310#define GET_RX_STATUS_DESC_LDPC(__pdesc) \ 310}
311 LE_BITS_TO_4BYTE(__pdesc+16, 1, 1) 311
312#define GET_RX_STATUS_DESC_STBC(__pdesc) \ 312static inline u32 get_rx_status_desc_magic_match(__le32 *__pdesc)
313 LE_BITS_TO_4BYTE(__pdesc+16, 2, 1) 313{
314#define GET_RX_DESC_BW(__pdesc) \ 314 return le32_get_bits(*(__pdesc + 3), BIT(31));
315 LE_BITS_TO_4BYTE(__pdesc+16, 4, 2) 315}
316 316
317#define GET_RX_DESC_TSFL(__pdesc) \ 317static inline u32 get_rx_desc_splcp(__le32 *__pdesc)
318 LE_BITS_TO_4BYTE(__pdesc+20, 0, 32) 318{
319 319 return le32_get_bits(*(__pdesc + 4), BIT(0));
320#define GET_RX_DESC_BUFF_ADDR(__pdesc) \ 320}
321 LE_BITS_TO_4BYTE(__pdesc+24, 0, 32) 321
322#define GET_RX_DESC_BUFF_ADDR64(__pdesc) \ 322static inline u32 get_rx_desc_bw(__le32 *__pdesc)
323 LE_BITS_TO_4BYTE(__pdesc+28, 0, 32) 323{
324 324 return le32_get_bits(*(__pdesc + 4), GENMASK(5, 4));
325#define SET_RX_DESC_BUFF_ADDR(__pdesc, __val) \ 325}
326 SET_BITS_TO_LE_4BYTE(__pdesc+24, 0, 32, __val) 326
327#define SET_RX_DESC_BUFF_ADDR64(__pdesc, __val) \ 327static inline u32 get_rx_desc_tsfl(__le32 *__pdesc)
328 SET_BITS_TO_LE_4BYTE(__pdesc+28, 0, 32, __val) 328{
329 329 return le32_to_cpu(*((__pdesc + 5)));
330}
331
332static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc)
333{
334 return le32_to_cpu(*((__pdesc + 6)));
335}
336
337static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val)
338{
339 *(__pdesc + 6) = cpu_to_le32(__val);
340}
330 341
331/* TX report 2 format in Rx desc*/ 342/* TX report 2 format in Rx desc*/
332 343
333#define GET_RX_RPT2_DESC_PKT_LEN(__rxstatusdesc) \ 344static inline u32 get_rx_rpt2_desc_macid_valid_1(__le32 *__rxstatusdesc)
334 LE_BITS_TO_4BYTE(__rxstatusdesc, 0, 9) 345{
335#define GET_RX_RPT2_DESC_MACID_VALID_1(__rxstatusdesc) \ 346 return le32_to_cpu(*((__rxstatusdesc + 4)));
336 LE_BITS_TO_4BYTE(__rxstatusdesc+16, 0, 32) 347}
337#define GET_RX_RPT2_DESC_MACID_VALID_2(__rxstatusdesc) \ 348
338 LE_BITS_TO_4BYTE(__rxstatusdesc+20, 0, 32) 349static inline u32 get_rx_rpt2_desc_macid_valid_2(__le32 *__rxstatusdesc)
339 350{
340#define SET_EARLYMODE_PKTNUM(__paddr, __value) \ 351 return le32_to_cpu(*((__rxstatusdesc + 5)));
341 SET_BITS_TO_LE_4BYTE(__paddr, 0, 4, __value) 352}
342#define SET_EARLYMODE_LEN0(__paddr, __value) \ 353
343 SET_BITS_TO_LE_4BYTE(__paddr, 4, 12, __value) 354static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value)
344#define SET_EARLYMODE_LEN1(__paddr, __value) \ 355{
345 SET_BITS_TO_LE_4BYTE(__paddr, 16, 12, __value) 356 le32p_replace_bits(__paddr, __value, GENMASK(3, 0));
346#define SET_EARLYMODE_LEN2_1(__paddr, __value) \ 357}
347 SET_BITS_TO_LE_4BYTE(__paddr, 28, 4, __value) 358
348#define SET_EARLYMODE_LEN2_2(__paddr, __value) \ 359static inline void set_earlymode_len0(__le32 *__paddr, u32 __value)
349 SET_BITS_TO_LE_4BYTE(__paddr+4, 0, 8, __value) 360{
350#define SET_EARLYMODE_LEN3(__paddr, __value) \ 361 le32p_replace_bits(__paddr, __value, GENMASK(15, 4));
351 SET_BITS_TO_LE_4BYTE(__paddr+4, 8, 12, __value) 362}
352#define SET_EARLYMODE_LEN4(__paddr, __value) \ 363
353 SET_BITS_TO_LE_4BYTE(__paddr+4, 20, 12, __value) 364static inline void set_earlymode_len1(__le32 *__paddr, u32 __value)
354 365{
355#define CLEAR_PCI_TX_DESC_CONTENT(__pdesc, _size) \ 366 le32p_replace_bits(__paddr, __value, GENMASK(27, 16));
356do { \ 367}
357 if (_size > TX_DESC_NEXT_DESC_OFFSET) \ 368
358 memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET); \ 369static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value)
359 else \ 370{
360 memset(__pdesc, 0, _size); \ 371 le32p_replace_bits(__paddr, __value, GENMASK(31, 28));
361} while (0) 372}
373
374static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value)
375{
376 le32p_replace_bits((__paddr + 1), __value, GENMASK(7, 0));
377}
378
379static inline void set_earlymode_len3(__le32 *__paddr, u32 __value)
380{
381 le32p_replace_bits((__paddr + 1), __value, GENMASK(19, 8));
382}
383
384static inline void set_earlymode_len4(__le32 *__paddr, u32 __value)
385{
386 le32p_replace_bits((__paddr + 1), __value, GENMASK(31, 20));
387}
388
389static inline void clear_pci_tx_desc_content(__le32 *__pdesc, u32 _size)
390{
391 if (_size > TX_DESC_NEXT_DESC_OFFSET)
392 memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET);
393 else
394 memset(__pdesc, 0, _size);
395}
362 396
363struct phy_rx_agc_info_t { 397struct phy_rx_agc_info_t {
364 #ifdef __LITTLE_ENDIAN 398 #ifdef __LITTLE_ENDIAN
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/def.h b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/def.h
index 827bc5f35d2a..235a7965675c 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/def.h
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/def.h
@@ -107,37 +107,6 @@
107 107
108#define MAX_RX_DMA_BUFFER_SIZE_8812 0x3E80 108#define MAX_RX_DMA_BUFFER_SIZE_8812 0x3E80
109 109
110#define C2H_RX_CMD_HDR_LEN 8
111#define GET_C2H_CMD_CMD_LEN(__prxhdr) \
112 LE_BITS_TO_4BYTE((__prxhdr), 0, 16)
113#define GET_C2H_CMD_ELEMENT_ID(__prxhdr) \
114 LE_BITS_TO_4BYTE((__prxhdr), 16, 8)
115#define GET_C2H_CMD_CMD_SEQ(__prxhdr) \
116 LE_BITS_TO_4BYTE((__prxhdr), 24, 7)
117#define GET_C2H_CMD_CONTINUE(__prxhdr) \
118 LE_BITS_TO_4BYTE((__prxhdr), 31, 1)
119#define GET_C2H_CMD_CONTENT(__prxhdr) \
120 ((u8 *)(__prxhdr) + C2H_RX_CMD_HDR_LEN)
121
122#define GET_C2H_CMD_FEEDBACK_ELEMENT_ID(__pcmdfbhdr) \
123 LE_BITS_TO_4BYTE((__pcmdfbhdr), 0, 8)
124#define GET_C2H_CMD_FEEDBACK_CCX_LEN(__pcmdfbhdr) \
125 LE_BITS_TO_4BYTE((__pcmdfbhdr), 8, 8)
126#define GET_C2H_CMD_FEEDBACK_CCX_CMD_CNT(__pcmdfbhdr) \
127 LE_BITS_TO_4BYTE((__pcmdfbhdr), 16, 16)
128#define GET_C2H_CMD_FEEDBACK_CCX_MAC_ID(__pcmdfbhdr) \
129 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 0, 5)
130#define GET_C2H_CMD_FEEDBACK_CCX_VALID(__pcmdfbhdr) \
131 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 7, 1)
132#define GET_C2H_CMD_FEEDBACK_CCX_RETRY_CNT(__pcmdfbhdr) \
133 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 8, 5)
134#define GET_C2H_CMD_FEEDBACK_CCX_TOK(__pcmdfbhdr) \
135 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 15, 1)
136#define GET_C2H_CMD_FEEDBACK_CCX_QSEL(__pcmdfbhdr) \
137 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 16, 4)
138#define GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pcmdfbhdr) \
139 LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 20, 12)
140
141#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3) 110#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
142 111
143#define CHIP_8812 BIT(2) 112#define CHIP_8812 BIT(2)
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
index 408af144098e..979e434a4e73 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c
@@ -3613,14 +3613,14 @@ u8 rtl8821ae_phy_sw_chnl(struct ieee80211_hw *hw)
3613 3613
3614u8 _rtl8812ae_get_right_chnl_place_for_iqk(u8 chnl) 3614u8 _rtl8812ae_get_right_chnl_place_for_iqk(u8 chnl)
3615{ 3615{
3616 u8 channel_all[TARGET_CHNL_NUM_2G_5G_8812] = { 3616 static const u8 channel_all[TARGET_CHNL_NUM_2G_5G_8812] = {
3617 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 3617 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
3618 14, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 3618 14, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54,
3619 56, 58, 60, 62, 64, 100, 102, 104, 106, 108, 3619 56, 58, 60, 62, 64, 100, 102, 104, 106, 108,
3620 110, 112, 114, 116, 118, 120, 122, 124, 126, 3620 110, 112, 114, 116, 118, 120, 122, 124, 126,
3621 128, 130, 132, 134, 136, 138, 140, 149, 151, 3621 128, 130, 132, 134, 136, 138, 140, 149, 151,
3622 153, 155, 157, 159, 161, 163, 165}; 3622 153, 155, 157, 159, 161, 163, 165};
3623 u8 place = chnl; 3623 u8 place;
3624 3624
3625 if (chnl > 14) { 3625 if (chnl > 14) {
3626 for (place = 14; place < sizeof(channel_all); place++) 3626 for (place = 14; place < sizeof(channel_all); place++)
diff --git a/drivers/net/wireless/realtek/rtw88/coex.c b/drivers/net/wireless/realtek/rtw88/coex.c
index 26e16ad5892a..793b40bdbf7c 100644
--- a/drivers/net/wireless/realtek/rtw88/coex.c
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
@@ -721,7 +721,7 @@ static void rtw_coex_set_rf_para(struct rtw_dev *rtwdev,
721 rtw_coex_set_bt_rx_gain(rtwdev, para.bt_lna_lvl); 721 rtw_coex_set_bt_rx_gain(rtwdev, para.bt_lna_lvl);
722} 722}
723 723
724static u32 rtw_coex_read_indirect_reg(struct rtw_dev *rtwdev, u16 addr) 724u32 rtw_coex_read_indirect_reg(struct rtw_dev *rtwdev, u16 addr)
725{ 725{
726 u32 val; 726 u32 val;
727 727
diff --git a/drivers/net/wireless/realtek/rtw88/coex.h b/drivers/net/wireless/realtek/rtw88/coex.h
index 56e871b2d6c2..008d1af5996b 100644
--- a/drivers/net/wireless/realtek/rtw88/coex.h
+++ b/drivers/net/wireless/realtek/rtw88/coex.h
@@ -346,6 +346,7 @@ void rtw_coex_set_wl_rx_gain(struct rtw_dev *rtwdev, bool low_gain)
346} 346}
347 347
348void rtw_coex_info_response(struct rtw_dev *rtwdev, struct sk_buff *skb); 348void rtw_coex_info_response(struct rtw_dev *rtwdev, struct sk_buff *skb);
349u32 rtw_coex_read_indirect_reg(struct rtw_dev *rtwdev, u16 addr);
349void rtw_coex_write_indirect_reg(struct rtw_dev *rtwdev, u16 addr, 350void rtw_coex_write_indirect_reg(struct rtw_dev *rtwdev, u16 addr,
350 u32 mask, u32 val); 351 u32 mask, u32 val);
351void rtw_coex_write_scbd(struct rtw_dev *rtwdev, u16 bitpos, bool set); 352void rtw_coex_write_scbd(struct rtw_dev *rtwdev, u16 bitpos, bool set);
diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c
index fedea28c7a97..e5e3605bb693 100644
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
@@ -256,7 +256,7 @@ static void rtw_ops_bss_info_changed(struct ieee80211_hw *hw,
256 if (conf->assoc) { 256 if (conf->assoc) {
257 rtw_coex_connect_notify(rtwdev, COEX_ASSOCIATE_FINISH); 257 rtw_coex_connect_notify(rtwdev, COEX_ASSOCIATE_FINISH);
258 net_type = RTW_NET_MGD_LINKED; 258 net_type = RTW_NET_MGD_LINKED;
259 chip->ops->do_iqk(rtwdev); 259 chip->ops->phy_calibration(rtwdev);
260 260
261 rtwvif->aid = conf->aid; 261 rtwvif->aid = conf->aid;
262 rtw_add_rsvd_page(rtwdev, RSVD_PS_POLL, true); 262 rtw_add_rsvd_page(rtwdev, RSVD_PS_POLL, true);
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
index e5a6bc094808..fc8f6213fc8f 100644
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -1236,6 +1236,7 @@ int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)
1236 ieee80211_hw_set(hw, SUPPORTS_PS); 1236 ieee80211_hw_set(hw, SUPPORTS_PS);
1237 ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS); 1237 ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS);
1238 ieee80211_hw_set(hw, SUPPORT_FAST_XMIT); 1238 ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
1239 ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU);
1239 1240
1240 hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | 1241 hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
1241 BIT(NL80211_IFTYPE_AP) | 1242 BIT(NL80211_IFTYPE_AP) |
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
index 9208b9ce5513..bede3f38516e 100644
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -640,7 +640,9 @@ struct rtw_chip_ops {
640 u8 antenna_rx); 640 u8 antenna_rx);
641 void (*cfg_ldo25)(struct rtw_dev *rtwdev, bool enable); 641 void (*cfg_ldo25)(struct rtw_dev *rtwdev, bool enable);
642 void (*false_alarm_statistics)(struct rtw_dev *rtwdev); 642 void (*false_alarm_statistics)(struct rtw_dev *rtwdev);
643 void (*do_iqk)(struct rtw_dev *rtwdev); 643 void (*phy_calibration)(struct rtw_dev *rtwdev);
644 void (*dpk_track)(struct rtw_dev *rtwdev);
645 void (*cck_pd_set)(struct rtw_dev *rtwdev, u8 level);
644 646
645 /* for coex */ 647 /* for coex */
646 void (*coex_set_init)(struct rtw_dev *rtwdev); 648 void (*coex_set_init)(struct rtw_dev *rtwdev);
@@ -864,6 +866,9 @@ struct rtw_chip_info {
864 const struct rtw_rfe_def *rfe_defs; 866 const struct rtw_rfe_def *rfe_defs;
865 u32 rfe_defs_size; 867 u32 rfe_defs_size;
866 868
869 bool en_dis_dpd;
870 u16 dpd_ratemask;
871
867 /* coex paras */ 872 /* coex paras */
868 u32 coex_para_ver; 873 u32 coex_para_ver;
869 u8 bt_desired_ver; 874 u8 bt_desired_ver;
@@ -1075,6 +1080,44 @@ struct rtw_coex {
1075 struct delayed_work defreeze_work; 1080 struct delayed_work defreeze_work;
1076}; 1081};
1077 1082
1083#define DPK_RF_REG_NUM 7
1084#define DPK_RF_PATH_NUM 2
1085#define DPK_BB_REG_NUM 18
1086#define DPK_CHANNEL_WIDTH_80 1
1087
1088DECLARE_EWMA(thermal, 10, 4);
1089
1090struct rtw_dpk_info {
1091 bool is_dpk_pwr_on;
1092 bool is_reload;
1093
1094 DECLARE_BITMAP(dpk_path_ok, DPK_RF_PATH_NUM);
1095
1096 u8 thermal_dpk[DPK_RF_PATH_NUM];
1097 struct ewma_thermal avg_thermal[DPK_RF_PATH_NUM];
1098
1099 u32 gnt_control;
1100 u32 gnt_value;
1101
1102 u8 result[RTW_RF_PATH_MAX];
1103 u8 dpk_txagc[RTW_RF_PATH_MAX];
1104 u32 coef[RTW_RF_PATH_MAX][20];
1105 u16 dpk_gs[RTW_RF_PATH_MAX];
1106 u8 thermal_dpk_delta[RTW_RF_PATH_MAX];
1107 u8 pre_pwsf[RTW_RF_PATH_MAX];
1108
1109 u8 dpk_band;
1110 u8 dpk_ch;
1111 u8 dpk_bw;
1112};
1113
1114struct rtw_phy_cck_pd_reg {
1115 u32 reg_pd;
1116 u32 mask_pd;
1117 u32 reg_cs;
1118 u32 mask_cs;
1119};
1120
1078#define DACK_MSBK_BACKUP_NUM 0xf 1121#define DACK_MSBK_BACKUP_NUM 0xf
1079#define DACK_DCK_BACKUP_NUM 0x2 1122#define DACK_DCK_BACKUP_NUM 0x2
1080 1123
@@ -1108,6 +1151,12 @@ struct rtw_dm_info {
1108 u32 dack_adck[RTW_RF_PATH_MAX]; 1151 u32 dack_adck[RTW_RF_PATH_MAX];
1109 u16 dack_msbk[RTW_RF_PATH_MAX][2][DACK_MSBK_BACKUP_NUM]; 1152 u16 dack_msbk[RTW_RF_PATH_MAX][2][DACK_MSBK_BACKUP_NUM];
1110 u8 dack_dck[RTW_RF_PATH_MAX][2][DACK_DCK_BACKUP_NUM]; 1153 u8 dack_dck[RTW_RF_PATH_MAX][2][DACK_DCK_BACKUP_NUM];
1154
1155 struct rtw_dpk_info dpk_info;
1156
1157 /* [bandwidth 0:20M/1:40M][number of path] */
1158 u8 cck_pd_lv[2][RTW_RF_PATH_MAX];
1159 u32 cck_fa_avg;
1111}; 1160};
1112 1161
1113struct rtw_efuse { 1162struct rtw_efuse {
@@ -1344,6 +1393,11 @@ static inline void rtw_flag_set(struct rtw_dev *rtwdev, enum rtw_flags flag)
1344 set_bit(flag, rtwdev->flags); 1393 set_bit(flag, rtwdev->flags);
1345} 1394}
1346 1395
1396static inline bool rtw_is_assoc(struct rtw_dev *rtwdev)
1397{
1398 return !!rtwdev->sta_cnt;
1399}
1400
1347void rtw_get_channel_params(struct cfg80211_chan_def *chandef, 1401void rtw_get_channel_params(struct cfg80211_chan_def *chandef,
1348 struct rtw_channel_params *ch_param); 1402 struct rtw_channel_params *ch_param);
1349bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target); 1403bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target);
diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c
index 528ee1ee2fd2..d3d3f40de75e 100644
--- a/drivers/net/wireless/realtek/rtw88/phy.c
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
@@ -111,6 +111,19 @@ enum rtw_phy_band_type {
111 PHY_BAND_5G = 1, 111 PHY_BAND_5G = 1,
112}; 112};
113 113
114static void rtw_phy_cck_pd_init(struct rtw_dev *rtwdev)
115{
116 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
117 u8 i, j;
118
119 for (i = 0; i <= RTW_CHANNEL_WIDTH_40; i++) {
120 for (j = 0; j < RTW_RF_PATH_MAX; j++)
121 dm_info->cck_pd_lv[i][j] = 0;
122 }
123
124 dm_info->cck_fa_avg = CCK_FA_AVG_RESET;
125}
126
114void rtw_phy_init(struct rtw_dev *rtwdev) 127void rtw_phy_init(struct rtw_dev *rtwdev)
115{ 128{
116 struct rtw_chip_info *chip = rtwdev->chip; 129 struct rtw_chip_info *chip = rtwdev->chip;
@@ -129,6 +142,7 @@ void rtw_phy_init(struct rtw_dev *rtwdev)
129 addr = chip->dig[0].addr; 142 addr = chip->dig[0].addr;
130 mask = chip->dig[0].mask; 143 mask = chip->dig[0].mask;
131 dm_info->igi_history[0] = rtw_read32_mask(rtwdev, addr, mask); 144 dm_info->igi_history[0] = rtw_read32_mask(rtwdev, addr, mask);
145 rtw_phy_cck_pd_init(rtwdev);
132} 146}
133 147
134void rtw_phy_dig_write(struct rtw_dev *rtwdev, u8 igi) 148void rtw_phy_dig_write(struct rtw_dev *rtwdev, u8 igi)
@@ -439,12 +453,100 @@ static void rtw_phy_ra_info_update(struct rtw_dev *rtwdev)
439 rtw_iterate_stas_atomic(rtwdev, rtw_phy_ra_info_update_iter, rtwdev); 453 rtw_iterate_stas_atomic(rtwdev, rtw_phy_ra_info_update_iter, rtwdev);
440} 454}
441 455
456static void rtw_phy_dpk_track(struct rtw_dev *rtwdev)
457{
458 struct rtw_chip_info *chip = rtwdev->chip;
459
460 if (chip->ops->dpk_track)
461 chip->ops->dpk_track(rtwdev);
462}
463
464#define CCK_PD_LV_MAX 5
465#define CCK_PD_FA_LV1_MIN 1000
466#define CCK_PD_FA_LV0_MAX 500
467
468static u8 rtw_phy_cck_pd_lv_unlink(struct rtw_dev *rtwdev)
469{
470 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
471 u32 cck_fa_avg = dm_info->cck_fa_avg;
472
473 if (cck_fa_avg > CCK_PD_FA_LV1_MIN)
474 return 1;
475
476 if (cck_fa_avg < CCK_PD_FA_LV0_MAX)
477 return 0;
478
479 return CCK_PD_LV_MAX;
480}
481
482#define CCK_PD_IGI_LV4_VAL 0x38
483#define CCK_PD_IGI_LV3_VAL 0x2a
484#define CCK_PD_IGI_LV2_VAL 0x24
485#define CCK_PD_RSSI_LV4_VAL 32
486#define CCK_PD_RSSI_LV3_VAL 32
487#define CCK_PD_RSSI_LV2_VAL 24
488
489static u8 rtw_phy_cck_pd_lv_link(struct rtw_dev *rtwdev)
490{
491 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
492 u8 igi = dm_info->igi_history[0];
493 u8 rssi = dm_info->min_rssi;
494 u32 cck_fa_avg = dm_info->cck_fa_avg;
495
496 if (igi > CCK_PD_IGI_LV4_VAL && rssi > CCK_PD_RSSI_LV4_VAL)
497 return 4;
498 if (igi > CCK_PD_IGI_LV3_VAL && rssi > CCK_PD_RSSI_LV3_VAL)
499 return 3;
500 if (igi > CCK_PD_IGI_LV2_VAL || rssi > CCK_PD_RSSI_LV2_VAL)
501 return 2;
502 if (cck_fa_avg > CCK_PD_FA_LV1_MIN)
503 return 1;
504 if (cck_fa_avg < CCK_PD_FA_LV0_MAX)
505 return 0;
506
507 return CCK_PD_LV_MAX;
508}
509
510static u8 rtw_phy_cck_pd_lv(struct rtw_dev *rtwdev)
511{
512 if (!rtw_is_assoc(rtwdev))
513 return rtw_phy_cck_pd_lv_unlink(rtwdev);
514 else
515 return rtw_phy_cck_pd_lv_link(rtwdev);
516}
517
518static void rtw_phy_cck_pd(struct rtw_dev *rtwdev)
519{
520 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
521 struct rtw_chip_info *chip = rtwdev->chip;
522 u32 cck_fa = dm_info->cck_fa_cnt;
523 u8 level;
524
525 if (rtwdev->hal.current_band_type != RTW_BAND_2G)
526 return;
527
528 if (dm_info->cck_fa_avg == CCK_FA_AVG_RESET)
529 dm_info->cck_fa_avg = cck_fa;
530 else
531 dm_info->cck_fa_avg = (dm_info->cck_fa_avg * 3 + cck_fa) >> 2;
532
533 level = rtw_phy_cck_pd_lv(rtwdev);
534
535 if (level >= CCK_PD_LV_MAX)
536 return;
537
538 if (chip->ops->cck_pd_set)
539 chip->ops->cck_pd_set(rtwdev, level);
540}
541
442void rtw_phy_dynamic_mechanism(struct rtw_dev *rtwdev) 542void rtw_phy_dynamic_mechanism(struct rtw_dev *rtwdev)
443{ 543{
444 /* for further calculation */ 544 /* for further calculation */
445 rtw_phy_statistics(rtwdev); 545 rtw_phy_statistics(rtwdev);
446 rtw_phy_dig(rtwdev); 546 rtw_phy_dig(rtwdev);
547 rtw_phy_cck_pd(rtwdev);
447 rtw_phy_ra_info_update(rtwdev); 548 rtw_phy_ra_info_update(rtwdev);
549 rtw_phy_dpk_track(rtwdev);
448} 550}
449 551
450#define FRAC_BITS 3 552#define FRAC_BITS 3
@@ -1316,11 +1418,20 @@ void rtw_phy_cfg_rf(struct rtw_dev *rtwdev, const struct rtw_table *tbl,
1316static void rtw_load_rfk_table(struct rtw_dev *rtwdev) 1418static void rtw_load_rfk_table(struct rtw_dev *rtwdev)
1317{ 1419{
1318 struct rtw_chip_info *chip = rtwdev->chip; 1420 struct rtw_chip_info *chip = rtwdev->chip;
1421 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
1319 1422
1320 if (!chip->rfk_init_tbl) 1423 if (!chip->rfk_init_tbl)
1321 return; 1424 return;
1322 1425
1426 rtw_write32_mask(rtwdev, 0x1e24, BIT(17), 0x1);
1427 rtw_write32_mask(rtwdev, 0x1cd0, BIT(28), 0x1);
1428 rtw_write32_mask(rtwdev, 0x1cd0, BIT(29), 0x1);
1429 rtw_write32_mask(rtwdev, 0x1cd0, BIT(30), 0x1);
1430 rtw_write32_mask(rtwdev, 0x1cd0, BIT(31), 0x0);
1431
1323 rtw_load_table(rtwdev, chip->rfk_init_tbl); 1432 rtw_load_table(rtwdev, chip->rfk_init_tbl);
1433
1434 dpk_info->is_dpk_pwr_on = 1;
1324} 1435}
1325 1436
1326void rtw_phy_load_tables(struct rtw_dev *rtwdev) 1437void rtw_phy_load_tables(struct rtw_dev *rtwdev)
@@ -1430,6 +1541,37 @@ static u8 rtw_get_channel_group(u8 channel)
1430 } 1541 }
1431} 1542}
1432 1543
1544static s8 rtw_phy_get_dis_dpd_by_rate_diff(struct rtw_dev *rtwdev, u16 rate)
1545{
1546 struct rtw_chip_info *chip = rtwdev->chip;
1547 s8 dpd_diff = 0;
1548
1549 if (!chip->en_dis_dpd)
1550 return 0;
1551
1552#define RTW_DPD_RATE_CHECK(_rate) \
1553 case DESC_RATE ## _rate: \
1554 if (DIS_DPD_RATE ## _rate & chip->dpd_ratemask) \
1555 dpd_diff = -6 * chip->txgi_factor; \
1556 break
1557
1558 switch (rate) {
1559 RTW_DPD_RATE_CHECK(6M);
1560 RTW_DPD_RATE_CHECK(9M);
1561 RTW_DPD_RATE_CHECK(MCS0);
1562 RTW_DPD_RATE_CHECK(MCS1);
1563 RTW_DPD_RATE_CHECK(MCS8);
1564 RTW_DPD_RATE_CHECK(MCS9);
1565 RTW_DPD_RATE_CHECK(VHT1SS_MCS0);
1566 RTW_DPD_RATE_CHECK(VHT1SS_MCS1);
1567 RTW_DPD_RATE_CHECK(VHT2SS_MCS0);
1568 RTW_DPD_RATE_CHECK(VHT2SS_MCS1);
1569 }
1570#undef RTW_DPD_RATE_CHECK
1571
1572 return dpd_diff;
1573}
1574
1433static u8 rtw_phy_get_2g_tx_power_index(struct rtw_dev *rtwdev, 1575static u8 rtw_phy_get_2g_tx_power_index(struct rtw_dev *rtwdev,
1434 struct rtw_2g_txpwr_idx *pwr_idx_2g, 1576 struct rtw_2g_txpwr_idx *pwr_idx_2g,
1435 enum rtw_bandwidth bandwidth, 1577 enum rtw_bandwidth bandwidth,
@@ -1638,6 +1780,9 @@ rtw_phy_get_tx_power_index(struct rtw_dev *rtwdev, u8 rf_path, u8 rate,
1638 tx_power = pwr_param.pwr_base; 1780 tx_power = pwr_param.pwr_base;
1639 offset = min_t(s8, pwr_param.pwr_offset, pwr_param.pwr_limit); 1781 offset = min_t(s8, pwr_param.pwr_offset, pwr_param.pwr_limit);
1640 1782
1783 if (rtwdev->chip->en_dis_dpd)
1784 offset += rtw_phy_get_dis_dpd_by_rate_diff(rtwdev, rate);
1785
1641 tx_power += offset; 1786 tx_power += offset;
1642 1787
1643 if (tx_power > rtwdev->chip->max_power_index) 1788 if (tx_power > rtwdev->chip->max_power_index)
diff --git a/drivers/net/wireless/realtek/rtw88/phy.h b/drivers/net/wireless/realtek/rtw88/phy.h
index cc87b157f23e..e79b084628e7 100644
--- a/drivers/net/wireless/realtek/rtw88/phy.h
+++ b/drivers/net/wireless/realtek/rtw88/phy.h
@@ -146,4 +146,6 @@ rtw_get_tx_power_params(struct rtw_dev *rtwdev, u8 path,
146#define MASKBYTE3LOWNIBBLE 0x0f000000 146#define MASKBYTE3LOWNIBBLE 0x0f000000
147#define MASKL3BYTES 0x00ffffff 147#define MASKL3BYTES 0x00ffffff
148 148
149#define CCK_FA_AVG_RESET 0xffffffff
150
149#endif 151#endif
diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h
index 0bd0717baa8b..fe793e270d22 100644
--- a/drivers/net/wireless/realtek/rtw88/reg.h
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
@@ -193,6 +193,8 @@
193#define REG_H2C_READ_ADDR 0x024C 193#define REG_H2C_READ_ADDR 0x024C
194#define REG_H2C_INFO 0x0254 194#define REG_H2C_INFO 0x0254
195 195
196#define REG_INT_MIG 0x0304
197
196#define REG_FWHW_TXQ_CTRL 0x0420 198#define REG_FWHW_TXQ_CTRL 0x0420
197#define BIT_EN_BCNQ_DL BIT(22) 199#define BIT_EN_BCNQ_DL BIT(22)
198#define BIT_EN_WR_FREE_TAIL BIT(20) 200#define BIT_EN_WR_FREE_TAIL BIT(20)
@@ -339,6 +341,20 @@
339 341
340#define REG_RFE_CTRL_E 0x0974 342#define REG_RFE_CTRL_E 0x0974
341 343
344#define REG_DIS_DPD 0x0a70
345#define DIS_DPD_MASK GENMASK(9, 0)
346#define DIS_DPD_RATE6M BIT(0)
347#define DIS_DPD_RATE9M BIT(1)
348#define DIS_DPD_RATEMCS0 BIT(2)
349#define DIS_DPD_RATEMCS1 BIT(3)
350#define DIS_DPD_RATEMCS8 BIT(4)
351#define DIS_DPD_RATEMCS9 BIT(5)
352#define DIS_DPD_RATEVHT1SS_MCS0 BIT(6)
353#define DIS_DPD_RATEVHT1SS_MCS1 BIT(7)
354#define DIS_DPD_RATEVHT2SS_MCS0 BIT(8)
355#define DIS_DPD_RATEVHT2SS_MCS1 BIT(9)
356#define DIS_DPD_RATEALL GENMASK(9, 0)
357
342#define REG_RFE_CTRL8 0x0cb4 358#define REG_RFE_CTRL8 0x0cb4
343#define BIT_MASK_RFE_SEL89 GENMASK(7, 0) 359#define BIT_MASK_RFE_SEL89 GENMASK(7, 0)
344#define REG_RFE_INV8 0x0cbd 360#define REG_RFE_INV8 0x0cbd
@@ -469,6 +485,7 @@
469#define RF_LUTWA 0x33 485#define RF_LUTWA 0x33
470#define RF_LUTWD1 0x3e 486#define RF_LUTWD1 0x3e
471#define RF_LUTWD0 0x3f 487#define RF_LUTWD0 0x3f
488#define RF_T_METER 0x42
472#define RF_XTALX2 0xb8 489#define RF_XTALX2 0xb8
473#define RF_MALSEL 0xbe 490#define RF_MALSEL 0xbe
474#define RF_RCKD 0xde 491#define RF_RCKD 0xde
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
index 568033afb024..63abda3b0ebf 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
@@ -766,6 +766,7 @@ static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status,
766 s8 min_rx_power = -120; 766 s8 min_rx_power = -120;
767 u8 pwdb = GET_PHY_STAT_P0_PWDB(phy_status); 767 u8 pwdb = GET_PHY_STAT_P0_PWDB(phy_status);
768 768
769 /* 8822B uses only 1 antenna to RX CCK rates */
769 pkt_stat->rx_power[RF_PATH_A] = pwdb - 110; 770 pkt_stat->rx_power[RF_PATH_A] = pwdb - 110;
770 pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1); 771 pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1);
771 pkt_stat->bw = RTW_CHANNEL_WIDTH_20; 772 pkt_stat->bw = RTW_CHANNEL_WIDTH_20;
@@ -1001,6 +1002,11 @@ static void rtw8822b_do_iqk(struct rtw_dev *rtwdev)
1001 counter, reload, ++do_iqk_cnt, iqk_fail_mask); 1002 counter, reload, ++do_iqk_cnt, iqk_fail_mask);
1002} 1003}
1003 1004
1005static void rtw8822b_phy_calibration(struct rtw_dev *rtwdev)
1006{
1007 rtw8822b_do_iqk(rtwdev);
1008}
1009
1004static void rtw8822b_coex_cfg_init(struct rtw_dev *rtwdev) 1010static void rtw8822b_coex_cfg_init(struct rtw_dev *rtwdev)
1005{ 1011{
1006 /* enable TBTT nterrupt */ 1012 /* enable TBTT nterrupt */
@@ -1794,7 +1800,7 @@ static struct rtw_chip_ops rtw8822b_ops = {
1794 .set_antenna = rtw8822b_set_antenna, 1800 .set_antenna = rtw8822b_set_antenna,
1795 .cfg_ldo25 = rtw8822b_cfg_ldo25, 1801 .cfg_ldo25 = rtw8822b_cfg_ldo25,
1796 .false_alarm_statistics = rtw8822b_false_alarm_statistics, 1802 .false_alarm_statistics = rtw8822b_false_alarm_statistics,
1797 .do_iqk = rtw8822b_do_iqk, 1803 .phy_calibration = rtw8822b_phy_calibration,
1798 1804
1799 .coex_set_init = rtw8822b_coex_cfg_init, 1805 .coex_set_init = rtw8822b_coex_cfg_init,
1800 .coex_set_ant_switch = rtw8822b_coex_cfg_ant_switch, 1806 .coex_set_ant_switch = rtw8822b_coex_cfg_ant_switch,
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
index 207f64cc3e55..c2f6cd76a658 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
@@ -13,6 +13,7 @@
13#include "mac.h" 13#include "mac.h"
14#include "reg.h" 14#include "reg.h"
15#include "debug.h" 15#include "debug.h"
16#include "util.h"
16 17
17static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, 18static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path,
18 u8 rx_path, bool is_tx2_path); 19 u8 rx_path, bool is_tx2_path);
@@ -1017,6 +1018,9 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev)
1017 BIT_RF_EN | BIT_RF_RSTB | BIT_RF_SDM_RSTB); 1018 BIT_RF_EN | BIT_RF_RSTB | BIT_RF_SDM_RSTB);
1018 rtw_write32_set(rtwdev, REG_WLRF1, BIT_WLRF1_BBRF_EN); 1019 rtw_write32_set(rtwdev, REG_WLRF1, BIT_WLRF1_BBRF_EN);
1019 1020
1021 /* disable low rate DPD */
1022 rtw_write32_mask(rtwdev, REG_DIS_DPD, DIS_DPD_MASK, DIS_DPD_RATEALL);
1023
1020 /* pre init before header files config */ 1024 /* pre init before header files config */
1021 rtw8822c_header_file_init(rtwdev, true); 1025 rtw8822c_header_file_init(rtwdev, true);
1022 1026
@@ -1114,6 +1118,7 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev)
1114#define WLAN_MAC_OPT_NORM_FUNC1 0x98 1118#define WLAN_MAC_OPT_NORM_FUNC1 0x98
1115#define WLAN_MAC_OPT_LB_FUNC1 0x80 1119#define WLAN_MAC_OPT_LB_FUNC1 0x80
1116#define WLAN_MAC_OPT_FUNC2 0x30810041 1120#define WLAN_MAC_OPT_FUNC2 0x30810041
1121#define WLAN_MAC_INT_MIG_CFG 0x33330000
1117 1122
1118#define WLAN_SIFS_CFG (WLAN_SIFS_CCK_CONT_TX | \ 1123#define WLAN_SIFS_CFG (WLAN_SIFS_CCK_CONT_TX | \
1119 (WLAN_SIFS_OFDM_CONT_TX << BIT_SHIFT_SIFS_OFDM_CTX) | \ 1124 (WLAN_SIFS_OFDM_CONT_TX << BIT_SHIFT_SIFS_OFDM_CTX) | \
@@ -1251,6 +1256,9 @@ static int rtw8822c_mac_init(struct rtw_dev *rtwdev)
1251 value16 = BIT_SET_RXPSF_ERRTHR(value16, 0x07); 1256 value16 = BIT_SET_RXPSF_ERRTHR(value16, 0x07);
1252 rtw_write16(rtwdev, REG_RXPSF_CTRL, value16); 1257 rtw_write16(rtwdev, REG_RXPSF_CTRL, value16);
1253 1258
1259 /* Interrupt migration configuration */
1260 rtw_write32(rtwdev, REG_INT_MIG, WLAN_MAC_INT_MIG_CFG);
1261
1254 return 0; 1262 return 0;
1255} 1263}
1256 1264
@@ -1620,16 +1628,16 @@ static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status,
1620 else if (gain_a > u_bnd) 1628 else if (gain_a > u_bnd)
1621 rx_power[RF_PATH_A] -= (gain_a - u_bnd) << 1; 1629 rx_power[RF_PATH_A] -= (gain_a - u_bnd) << 1;
1622 if (gain_b < l_bnd) 1630 if (gain_b < l_bnd)
1623 rx_power[RF_PATH_A] += (l_bnd - gain_b) << 1; 1631 rx_power[RF_PATH_B] += (l_bnd - gain_b) << 1;
1624 else if (gain_b > u_bnd) 1632 else if (gain_b > u_bnd)
1625 rx_power[RF_PATH_A] -= (gain_b - u_bnd) << 1; 1633 rx_power[RF_PATH_B] -= (gain_b - u_bnd) << 1;
1626 1634
1627 rx_power[RF_PATH_A] -= 110; 1635 rx_power[RF_PATH_A] -= 110;
1628 rx_power[RF_PATH_B] -= 110; 1636 rx_power[RF_PATH_B] -= 110;
1629 1637
1630 pkt_stat->rx_power[RF_PATH_A] = max3(rx_power[RF_PATH_A], 1638 pkt_stat->rx_power[RF_PATH_A] = rx_power[RF_PATH_A];
1631 rx_power[RF_PATH_B], 1639 pkt_stat->rx_power[RF_PATH_B] = rx_power[RF_PATH_B];
1632 min_rx_power); 1640
1633 pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1); 1641 pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1);
1634 pkt_stat->bw = RTW_CHANNEL_WIDTH_20; 1642 pkt_stat->bw = RTW_CHANNEL_WIDTH_20;
1635 pkt_stat->signal_power = max(pkt_stat->rx_power[RF_PATH_A], 1643 pkt_stat->signal_power = max(pkt_stat->rx_power[RF_PATH_A],
@@ -1872,6 +1880,22 @@ static void rtw8822c_false_alarm_statistics(struct rtw_dev *rtwdev)
1872 1880
1873static void rtw8822c_do_iqk(struct rtw_dev *rtwdev) 1881static void rtw8822c_do_iqk(struct rtw_dev *rtwdev)
1874{ 1882{
1883 struct rtw_iqk_para para = {0};
1884 u8 iqk_chk;
1885 int counter;
1886
1887 para.clear = 1;
1888 rtw_fw_do_iqk(rtwdev, &para);
1889
1890 for (counter = 0; counter < 300; counter++) {
1891 iqk_chk = rtw_read8(rtwdev, REG_RPT_CIP);
1892 if (iqk_chk == 0xaa)
1893 break;
1894 msleep(20);
1895 }
1896 rtw_write8(rtwdev, REG_IQKSTAT, 0x0);
1897
1898 rtw_dbg(rtwdev, RTW_DBG_RFK, "iqk counter=%d\n", counter);
1875} 1899}
1876 1900
1877/* for coex */ 1901/* for coex */
@@ -2029,6 +2053,1144 @@ static void rtw8822c_coex_cfg_wl_rx_gain(struct rtw_dev *rtwdev, bool low_gain)
2029 } 2053 }
2030} 2054}
2031 2055
2056struct dpk_cfg_pair {
2057 u32 addr;
2058 u32 bitmask;
2059 u32 data;
2060};
2061
2062void rtw8822c_parse_tbl_dpk(struct rtw_dev *rtwdev,
2063 const struct rtw_table *tbl)
2064{
2065 const struct dpk_cfg_pair *p = tbl->data;
2066 const struct dpk_cfg_pair *end = p + tbl->size / 3;
2067
2068 BUILD_BUG_ON(sizeof(struct dpk_cfg_pair) != sizeof(u32) * 3);
2069
2070 for (; p < end; p++)
2071 rtw_write32_mask(rtwdev, p->addr, p->bitmask, p->data);
2072}
2073
2074static void rtw8822c_dpk_set_gnt_wl(struct rtw_dev *rtwdev, bool is_before_k)
2075{
2076 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2077
2078 if (is_before_k) {
2079 dpk_info->gnt_control = rtw_read32(rtwdev, 0x70);
2080 dpk_info->gnt_value = rtw_coex_read_indirect_reg(rtwdev, 0x38);
2081 rtw_write32_mask(rtwdev, 0x70, BIT(26), 0x1);
2082 rtw_coex_write_indirect_reg(rtwdev, 0x38, MASKBYTE1, 0x77);
2083 } else {
2084 rtw_coex_write_indirect_reg(rtwdev, 0x38, MASKDWORD,
2085 dpk_info->gnt_value);
2086 rtw_write32(rtwdev, 0x70, dpk_info->gnt_control);
2087 }
2088}
2089
2090static void
2091rtw8822c_dpk_restore_registers(struct rtw_dev *rtwdev, u32 reg_num,
2092 struct rtw_backup_info *bckp)
2093{
2094 rtw_restore_reg(rtwdev, bckp, reg_num);
2095 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc);
2096 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, BIT_DPD_CLK, 0x4);
2097}
2098
2099static void
2100rtw8822c_dpk_backup_registers(struct rtw_dev *rtwdev, u32 *reg,
2101 u32 reg_num, struct rtw_backup_info *bckp)
2102{
2103 u32 i;
2104
2105 for (i = 0; i < reg_num; i++) {
2106 bckp[i].len = 4;
2107 bckp[i].reg = reg[i];
2108 bckp[i].val = rtw_read32(rtwdev, reg[i]);
2109 }
2110}
2111
2112static void rtw8822c_dpk_backup_rf_registers(struct rtw_dev *rtwdev,
2113 u32 *rf_reg,
2114 u32 rf_reg_bak[][2])
2115{
2116 u32 i;
2117
2118 for (i = 0; i < DPK_RF_REG_NUM; i++) {
2119 rf_reg_bak[i][RF_PATH_A] = rtw_read_rf(rtwdev, RF_PATH_A,
2120 rf_reg[i], RFREG_MASK);
2121 rf_reg_bak[i][RF_PATH_B] = rtw_read_rf(rtwdev, RF_PATH_B,
2122 rf_reg[i], RFREG_MASK);
2123 }
2124}
2125
2126static void rtw8822c_dpk_reload_rf_registers(struct rtw_dev *rtwdev,
2127 u32 *rf_reg,
2128 u32 rf_reg_bak[][2])
2129{
2130 u32 i;
2131
2132 for (i = 0; i < DPK_RF_REG_NUM; i++) {
2133 rtw_write_rf(rtwdev, RF_PATH_A, rf_reg[i], RFREG_MASK,
2134 rf_reg_bak[i][RF_PATH_A]);
2135 rtw_write_rf(rtwdev, RF_PATH_B, rf_reg[i], RFREG_MASK,
2136 rf_reg_bak[i][RF_PATH_B]);
2137 }
2138}
2139
2140static void rtw8822c_dpk_information(struct rtw_dev *rtwdev)
2141{
2142 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2143 u32 reg;
2144 u8 band_shift;
2145
2146 reg = rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK);
2147
2148 band_shift = FIELD_GET(BIT(16), reg);
2149 dpk_info->dpk_band = 1 << band_shift;
2150 dpk_info->dpk_ch = FIELD_GET(0xff, reg);
2151 dpk_info->dpk_bw = FIELD_GET(0x3000, reg);
2152}
2153
2154static void rtw8822c_dpk_rxbb_dc_cal(struct rtw_dev *rtwdev, u8 path)
2155{
2156 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84800);
2157 udelay(5);
2158 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84801);
2159 usleep_range(600, 610);
2160 rtw_write_rf(rtwdev, path, 0x92, RFREG_MASK, 0x84800);
2161}
2162
2163static u8 rtw8822c_dpk_dc_corr_check(struct rtw_dev *rtwdev, u8 path)
2164{
2165 u16 dc_i, dc_q;
2166 u8 corr_val, corr_idx;
2167
2168 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x000900f0);
2169 dc_i = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(27, 16));
2170 dc_q = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(11, 0));
2171
2172 if (dc_i & BIT(11))
2173 dc_i = 0x1000 - dc_i;
2174 if (dc_q & BIT(11))
2175 dc_q = 0x1000 - dc_q;
2176
2177 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x000000f0);
2178 corr_idx = (u8)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(7, 0));
2179 corr_val = (u8)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(15, 8));
2180
2181 if (dc_i > 200 || dc_q > 200 || corr_idx < 40 || corr_idx > 65)
2182 return 1;
2183 else
2184 return 0;
2185
2186}
2187
2188static void rtw8822c_dpk_tx_pause(struct rtw_dev *rtwdev)
2189{
2190 u8 reg_a, reg_b;
2191 u16 count = 0;
2192
2193 rtw_write8(rtwdev, 0x522, 0xff);
2194 rtw_write32_mask(rtwdev, 0x1e70, 0xf, 0x2);
2195
2196 do {
2197 reg_a = (u8)rtw_read_rf(rtwdev, RF_PATH_A, 0x00, 0xf0000);
2198 reg_b = (u8)rtw_read_rf(rtwdev, RF_PATH_B, 0x00, 0xf0000);
2199 udelay(2);
2200 count++;
2201 } while ((reg_a == 2 || reg_b == 2) && count < 2500);
2202}
2203
2204static void rtw8822c_dpk_mac_bb_setting(struct rtw_dev *rtwdev)
2205{
2206 rtw8822c_dpk_tx_pause(rtwdev);
2207 rtw_load_table(rtwdev, &rtw8822c_dpk_mac_bb_tbl);
2208}
2209
2210static void rtw8822c_dpk_afe_setting(struct rtw_dev *rtwdev, bool is_do_dpk)
2211{
2212 if (is_do_dpk)
2213 rtw_load_table(rtwdev, &rtw8822c_dpk_afe_is_dpk_tbl);
2214 else
2215 rtw_load_table(rtwdev, &rtw8822c_dpk_afe_no_dpk_tbl);
2216}
2217
2218static void rtw8822c_dpk_pre_setting(struct rtw_dev *rtwdev)
2219{
2220 u8 path;
2221
2222 for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
2223 rtw_write_rf(rtwdev, path, RF_RXAGC_OFFSET, RFREG_MASK, 0x0);
2224 rtw_write32(rtwdev, REG_NCTL0, 0x8 | (path << 1));
2225 if (rtwdev->dm_info.dpk_info.dpk_band == RTW_BAND_2G)
2226 rtw_write32(rtwdev, REG_DPD_LUT3, 0x1f100000);
2227 else
2228 rtw_write32(rtwdev, REG_DPD_LUT3, 0x1f0d0000);
2229 rtw_write32_mask(rtwdev, REG_DPD_LUT0, BIT_GLOSS_DB, 0x4);
2230 rtw_write32_mask(rtwdev, REG_IQK_CTL1, BIT_TX_CFIR, 0x3);
2231 }
2232 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc);
2233 rtw_write32(rtwdev, REG_DPD_CTL11, 0x3b23170b);
2234 rtw_write32(rtwdev, REG_DPD_CTL12, 0x775f5347);
2235}
2236
2237static u32 rtw8822c_dpk_rf_setting(struct rtw_dev *rtwdev, u8 path)
2238{
2239 u32 ori_txbb;
2240
2241 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, RFREG_MASK, 0x50017);
2242 ori_txbb = rtw_read_rf(rtwdev, path, RF_TX_GAIN, RFREG_MASK);
2243
2244 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TX_GAIN, 0x1);
2245 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_PWR_TRIM, 0x1);
2246 rtw_write_rf(rtwdev, path, RF_TX_GAIN_OFFSET, BIT_TX_OFFSET_VAL, 0x0);
2247 rtw_write_rf(rtwdev, path, RF_TX_GAIN, RFREG_MASK, ori_txbb);
2248
2249 if (rtwdev->dm_info.dpk_info.dpk_band == RTW_BAND_2G) {
2250 rtw_write_rf(rtwdev, path, RF_TX_GAIN_OFFSET, BIT_LB_ATT, 0x1);
2251 rtw_write_rf(rtwdev, path, RF_RXG_GAIN, BIT_RXG_GAIN, 0x0);
2252 } else {
2253 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_TXA_LB_ATT, 0x0);
2254 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_LB_ATT, 0x6);
2255 rtw_write_rf(rtwdev, path, RF_TXA_LB_SW, BIT_LB_SW, 0x1);
2256 rtw_write_rf(rtwdev, path, RF_RXA_MIX_GAIN, BIT_RXA_MIX_GAIN, 0);
2257 }
2258
2259 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_RXAGC, 0xf);
2260 rtw_write_rf(rtwdev, path, RF_DEBUG, BIT_DE_TRXBW, 0x1);
2261 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_RXBB, 0x0);
2262
2263 if (rtwdev->dm_info.dpk_info.dpk_bw == DPK_CHANNEL_WIDTH_80)
2264 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_TXBB, 0x2);
2265 else
2266 rtw_write_rf(rtwdev, path, RF_BW_TRXBB, BIT_BW_TXBB, 0x1);
2267
2268 rtw_write_rf(rtwdev, path, RF_EXT_TIA_BW, BIT(1), 0x1);
2269
2270 usleep_range(100, 110);
2271
2272 return ori_txbb & 0x1f;
2273}
2274
2275static u16 rtw8822c_dpk_get_cmd(struct rtw_dev *rtwdev, u8 action, u8 path)
2276{
2277 u16 cmd;
2278 u8 bw = rtwdev->dm_info.dpk_info.dpk_bw == DPK_CHANNEL_WIDTH_80 ? 2 : 0;
2279
2280 switch (action) {
2281 case RTW_DPK_GAIN_LOSS:
2282 cmd = 0x14 + path;
2283 break;
2284 case RTW_DPK_DO_DPK:
2285 cmd = 0x16 + path + bw;
2286 break;
2287 case RTW_DPK_DPK_ON:
2288 cmd = 0x1a + path;
2289 break;
2290 case RTW_DPK_DAGC:
2291 cmd = 0x1c + path + bw;
2292 break;
2293 default:
2294 return 0;
2295 }
2296
2297 return (cmd << 8) | 0x48;
2298}
2299
2300static u8 rtw8822c_dpk_one_shot(struct rtw_dev *rtwdev, u8 path, u8 action)
2301{
2302 u16 dpk_cmd;
2303 u8 result = 0;
2304
2305 rtw8822c_dpk_set_gnt_wl(rtwdev, true);
2306
2307 if (action == RTW_DPK_CAL_PWR) {
2308 rtw_write32_mask(rtwdev, REG_DPD_CTL0, BIT(12), 0x1);
2309 rtw_write32_mask(rtwdev, REG_DPD_CTL0, BIT(12), 0x0);
2310 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, BIT_RPT_SEL, 0x0);
2311 msleep(10);
2312 if (!check_hw_ready(rtwdev, REG_STAT_RPT, BIT(31), 0x1)) {
2313 result = 1;
2314 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] one-shot over 20ms\n");
2315 }
2316 } else {
2317 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE,
2318 0x8 | (path << 1));
2319 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_IQ_SWITCH, 0x9);
2320
2321 dpk_cmd = rtw8822c_dpk_get_cmd(rtwdev, action, path);
2322 rtw_write32(rtwdev, REG_NCTL0, dpk_cmd);
2323 rtw_write32(rtwdev, REG_NCTL0, dpk_cmd + 1);
2324 msleep(10);
2325 if (!check_hw_ready(rtwdev, 0x2d9c, 0xff, 0x55)) {
2326 result = 1;
2327 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] one-shot over 20ms\n");
2328 }
2329 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE,
2330 0x8 | (path << 1));
2331 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_IQ_SWITCH, 0x0);
2332 }
2333
2334 rtw8822c_dpk_set_gnt_wl(rtwdev, false);
2335
2336 rtw_write8(rtwdev, 0x1b10, 0x0);
2337
2338 return result;
2339}
2340
2341static u16 rtw8822c_dpk_dgain_read(struct rtw_dev *rtwdev, u8 path)
2342{
2343 u16 dgain;
2344
2345 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc);
2346 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, 0x00ff0000, 0x0);
2347
2348 dgain = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, GENMASK(27, 16));
2349
2350 return dgain;
2351}
2352
2353static u8 rtw8822c_dpk_thermal_read(struct rtw_dev *rtwdev, u8 path)
2354{
2355 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x1);
2356 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x0);
2357 rtw_write_rf(rtwdev, path, RF_T_METER, BIT(19), 0x1);
2358 udelay(15);
2359
2360 return (u8)rtw_read_rf(rtwdev, path, RF_T_METER, 0x0007e);
2361}
2362
2363static u32 rtw8822c_dpk_pas_read(struct rtw_dev *rtwdev, u8 path)
2364{
2365 u32 i_val, q_val;
2366
2367 rtw_write32(rtwdev, REG_NCTL0, 0x8 | (path << 1));
2368 rtw_write32_mask(rtwdev, 0x1b48, BIT(14), 0x0);
2369 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x00060001);
2370 rtw_write32(rtwdev, 0x1b4c, 0x00000000);
2371 rtw_write32(rtwdev, 0x1b4c, 0x00080000);
2372
2373 q_val = rtw_read32_mask(rtwdev, REG_STAT_RPT, MASKHWORD);
2374 i_val = rtw_read32_mask(rtwdev, REG_STAT_RPT, MASKLWORD);
2375
2376 if (i_val & BIT(15))
2377 i_val = 0x10000 - i_val;
2378 if (q_val & BIT(15))
2379 q_val = 0x10000 - q_val;
2380
2381 rtw_write32(rtwdev, 0x1b4c, 0x00000000);
2382
2383 return i_val * i_val + q_val * q_val;
2384}
2385
2386static u32 rtw8822c_psd_log2base(u32 val)
2387{
2388 u32 tmp, val_integerd_b, tindex;
2389 u32 result, val_fractiond_b;
2390 u32 table_fraction[21] = {0, 432, 332, 274, 232, 200, 174,
2391 151, 132, 115, 100, 86, 74, 62, 51,
2392 42, 32, 23, 15, 7, 0};
2393
2394 if (val == 0)
2395 return 0;
2396
2397 val_integerd_b = __fls(val) + 1;
2398
2399 tmp = (val * 100) / (1 << val_integerd_b);
2400 tindex = tmp / 5;
2401
2402 if (tindex >= ARRAY_SIZE(table_fraction))
2403 tindex = ARRAY_SIZE(table_fraction) - 1;
2404
2405 val_fractiond_b = table_fraction[tindex];
2406
2407 result = val_integerd_b * 100 - val_fractiond_b;
2408
2409 return result;
2410}
2411
2412static u8 rtw8822c_dpk_gainloss_result(struct rtw_dev *rtwdev, u8 path)
2413{
2414 u8 result;
2415
2416 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1));
2417 rtw_write32_mask(rtwdev, 0x1b48, BIT(14), 0x1);
2418 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x00060000);
2419
2420 result = (u8)rtw_read32_mask(rtwdev, REG_STAT_RPT, 0x000000f0);
2421
2422 rtw_write32_mask(rtwdev, 0x1b48, BIT(14), 0x0);
2423
2424 return result;
2425}
2426
2427static u8 rtw8822c_dpk_agc_gain_chk(struct rtw_dev *rtwdev, u8 path,
2428 u8 limited_pga)
2429{
2430 u8 result = 0;
2431 u16 dgain;
2432
2433 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC);
2434 dgain = rtw8822c_dpk_dgain_read(rtwdev, path);
2435
2436 if (dgain > 1535 && !limited_pga)
2437 return RTW_DPK_GAIN_LESS;
2438 else if (dgain < 768 && !limited_pga)
2439 return RTW_DPK_GAIN_LARGE;
2440 else
2441 return result;
2442}
2443
2444static u8 rtw8822c_dpk_agc_loss_chk(struct rtw_dev *rtwdev, u8 path)
2445{
2446 u32 loss, loss_db;
2447
2448 loss = rtw8822c_dpk_pas_read(rtwdev, path);
2449 if (loss < 0x4000000)
2450 return RTW_DPK_GL_LESS;
2451 loss_db = 3 * rtw8822c_psd_log2base(loss >> 13) - 3870;
2452
2453 if (loss_db > 1000)
2454 return RTW_DPK_GL_LARGE;
2455 else if (loss_db < 250)
2456 return RTW_DPK_GL_LESS;
2457 else
2458 return RTW_DPK_AGC_OUT;
2459}
2460
2461struct rtw8822c_dpk_data {
2462 u8 txbb;
2463 u8 pga;
2464 u8 limited_pga;
2465 u8 agc_cnt;
2466 bool loss_only;
2467 bool gain_only;
2468 u8 path;
2469};
2470
2471static u8 rtw8822c_gain_check_state(struct rtw_dev *rtwdev,
2472 struct rtw8822c_dpk_data *data)
2473{
2474 u8 state;
2475
2476 data->txbb = (u8)rtw_read_rf(rtwdev, data->path, RF_TX_GAIN,
2477 BIT_GAIN_TXBB);
2478 data->pga = (u8)rtw_read_rf(rtwdev, data->path, RF_MODE_TRXAGC,
2479 BIT_RXAGC);
2480
2481 if (data->loss_only) {
2482 state = RTW_DPK_LOSS_CHECK;
2483 goto check_end;
2484 }
2485
2486 state = rtw8822c_dpk_agc_gain_chk(rtwdev, data->path,
2487 data->limited_pga);
2488 if (state == RTW_DPK_GAIN_CHECK && data->gain_only)
2489 state = RTW_DPK_AGC_OUT;
2490 else if (state == RTW_DPK_GAIN_CHECK)
2491 state = RTW_DPK_LOSS_CHECK;
2492
2493check_end:
2494 data->agc_cnt++;
2495 if (data->agc_cnt >= 6)
2496 state = RTW_DPK_AGC_OUT;
2497
2498 return state;
2499}
2500
2501static u8 rtw8822c_gain_large_state(struct rtw_dev *rtwdev,
2502 struct rtw8822c_dpk_data *data)
2503{
2504 u8 pga = data->pga;
2505
2506 if (pga > 0xe)
2507 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xc);
2508 else if (pga > 0xb && pga < 0xf)
2509 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0x0);
2510 else if (pga < 0xc)
2511 data->limited_pga = 1;
2512
2513 return RTW_DPK_GAIN_CHECK;
2514}
2515
2516static u8 rtw8822c_gain_less_state(struct rtw_dev *rtwdev,
2517 struct rtw8822c_dpk_data *data)
2518{
2519 u8 pga = data->pga;
2520
2521 if (pga < 0xc)
2522 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xc);
2523 else if (pga > 0xb && pga < 0xf)
2524 rtw_write_rf(rtwdev, data->path, RF_MODE_TRXAGC, BIT_RXAGC, 0xf);
2525 else if (pga > 0xe)
2526 data->limited_pga = 1;
2527
2528 return RTW_DPK_GAIN_CHECK;
2529}
2530
2531static u8 rtw8822c_gl_state(struct rtw_dev *rtwdev,
2532 struct rtw8822c_dpk_data *data, u8 is_large)
2533{
2534 u8 txbb_bound[] = {0x1f, 0};
2535
2536 if (data->txbb == txbb_bound[is_large])
2537 return RTW_DPK_AGC_OUT;
2538
2539 if (is_large == 1)
2540 data->txbb -= 2;
2541 else
2542 data->txbb += 3;
2543
2544 rtw_write_rf(rtwdev, data->path, RF_TX_GAIN, BIT_GAIN_TXBB, data->txbb);
2545 data->limited_pga = 0;
2546
2547 return RTW_DPK_GAIN_CHECK;
2548}
2549
2550static u8 rtw8822c_gl_large_state(struct rtw_dev *rtwdev,
2551 struct rtw8822c_dpk_data *data)
2552{
2553 return rtw8822c_gl_state(rtwdev, data, 1);
2554}
2555
2556static u8 rtw8822c_gl_less_state(struct rtw_dev *rtwdev,
2557 struct rtw8822c_dpk_data *data)
2558{
2559 return rtw8822c_gl_state(rtwdev, data, 0);
2560}
2561
2562static u8 rtw8822c_loss_check_state(struct rtw_dev *rtwdev,
2563 struct rtw8822c_dpk_data *data)
2564{
2565 u8 path = data->path;
2566 u8 state;
2567
2568 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_GAIN_LOSS);
2569 state = rtw8822c_dpk_agc_loss_chk(rtwdev, path);
2570
2571 return state;
2572}
2573
2574static u8 (*dpk_state[])(struct rtw_dev *rtwdev,
2575 struct rtw8822c_dpk_data *data) = {
2576 rtw8822c_gain_check_state, rtw8822c_gain_large_state,
2577 rtw8822c_gain_less_state, rtw8822c_gl_large_state,
2578 rtw8822c_gl_less_state, rtw8822c_loss_check_state };
2579
2580static u8 rtw8822c_dpk_pas_agc(struct rtw_dev *rtwdev, u8 path,
2581 bool gain_only, bool loss_only)
2582{
2583 struct rtw8822c_dpk_data data = {0};
2584 u8 (*func)(struct rtw_dev *rtwdev, struct rtw8822c_dpk_data *data);
2585 u8 state = RTW_DPK_GAIN_CHECK;
2586
2587 data.loss_only = loss_only;
2588 data.gain_only = gain_only;
2589 data.path = path;
2590
2591 for (;;) {
2592 func = dpk_state[state];
2593 state = func(rtwdev, &data);
2594 if (state == RTW_DPK_AGC_OUT)
2595 break;
2596 }
2597
2598 return data.txbb;
2599}
2600
2601static bool rtw8822c_dpk_coef_iq_check(struct rtw_dev *rtwdev,
2602 u16 coef_i, u16 coef_q)
2603{
2604 if (coef_i == 0x1000 || coef_i == 0x0fff ||
2605 coef_q == 0x1000 || coef_q == 0x0fff)
2606 return 1;
2607 else
2608 return 0;
2609}
2610
2611static u32 rtw8822c_dpk_coef_transfer(struct rtw_dev *rtwdev)
2612{
2613 u32 reg = 0;
2614 u16 coef_i = 0, coef_q = 0;
2615
2616 reg = rtw_read32(rtwdev, REG_STAT_RPT);
2617
2618 coef_i = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, MASKHWORD) & 0x1fff;
2619 coef_q = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, MASKLWORD) & 0x1fff;
2620
2621 coef_q = ((0x2000 - coef_q) & 0x1fff) - 1;
2622
2623 reg = (coef_i << 16) | coef_q;
2624
2625 return reg;
2626}
2627
2628static const u32 rtw8822c_dpk_get_coef_tbl[] = {
2629 0x000400f0, 0x040400f0, 0x080400f0, 0x010400f0, 0x050400f0,
2630 0x090400f0, 0x020400f0, 0x060400f0, 0x0a0400f0, 0x030400f0,
2631 0x070400f0, 0x0b0400f0, 0x0c0400f0, 0x100400f0, 0x0d0400f0,
2632 0x110400f0, 0x0e0400f0, 0x120400f0, 0x0f0400f0, 0x130400f0,
2633};
2634
2635static void rtw8822c_dpk_coef_tbl_apply(struct rtw_dev *rtwdev, u8 path)
2636{
2637 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2638 int i;
2639
2640 for (i = 0; i < 20; i++) {
2641 rtw_write32(rtwdev, REG_RXSRAM_CTL,
2642 rtw8822c_dpk_get_coef_tbl[i]);
2643 dpk_info->coef[path][i] = rtw8822c_dpk_coef_transfer(rtwdev);
2644 }
2645}
2646
2647static void rtw8822c_dpk_get_coef(struct rtw_dev *rtwdev, u8 path)
2648{
2649 rtw_write32(rtwdev, REG_NCTL0, 0x0000000c);
2650
2651 if (path == RF_PATH_A) {
2652 rtw_write32_mask(rtwdev, REG_DPD_CTL0, BIT(24), 0x0);
2653 rtw_write32(rtwdev, REG_DPD_CTL0_S0, 0x30000080);
2654 } else if (path == RF_PATH_B) {
2655 rtw_write32_mask(rtwdev, REG_DPD_CTL0, BIT(24), 0x1);
2656 rtw_write32(rtwdev, REG_DPD_CTL0_S1, 0x30000080);
2657 }
2658
2659 rtw8822c_dpk_coef_tbl_apply(rtwdev, path);
2660}
2661
2662static u8 rtw8822c_dpk_coef_read(struct rtw_dev *rtwdev, u8 path)
2663{
2664 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2665 u8 addr, result = 1;
2666 u16 coef_i, coef_q;
2667
2668 for (addr = 0; addr < 20; addr++) {
2669 coef_i = FIELD_GET(0x1fff0000, dpk_info->coef[path][addr]);
2670 coef_q = FIELD_GET(0x1fff, dpk_info->coef[path][addr]);
2671
2672 if (rtw8822c_dpk_coef_iq_check(rtwdev, coef_i, coef_q)) {
2673 result = 0;
2674 break;
2675 }
2676 }
2677 return result;
2678}
2679
2680static void rtw8822c_dpk_coef_write(struct rtw_dev *rtwdev, u8 path, u8 result)
2681{
2682 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2683 u16 reg[DPK_RF_PATH_NUM] = {0x1b0c, 0x1b64};
2684 u32 coef;
2685 u8 addr;
2686
2687 rtw_write32(rtwdev, REG_NCTL0, 0x0000000c);
2688 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x000000f0);
2689
2690 for (addr = 0; addr < 20; addr++) {
2691 if (result == 0) {
2692 if (addr == 3)
2693 coef = 0x04001fff;
2694 else
2695 coef = 0x00001fff;
2696 } else {
2697 coef = dpk_info->coef[path][addr];
2698 }
2699 rtw_write32(rtwdev, reg[path] + addr * 4, coef);
2700 }
2701}
2702
2703static void rtw8822c_dpk_fill_result(struct rtw_dev *rtwdev, u32 dpk_txagc,
2704 u8 path, u8 result)
2705{
2706 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2707
2708 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1));
2709
2710 if (result)
2711 rtw_write8(rtwdev, REG_DPD_AGC, (u8)(dpk_txagc - 6));
2712 else
2713 rtw_write8(rtwdev, REG_DPD_AGC, 0x00);
2714
2715 dpk_info->result[path] = result;
2716 dpk_info->dpk_txagc[path] = rtw_read8(rtwdev, REG_DPD_AGC);
2717
2718 rtw8822c_dpk_coef_write(rtwdev, path, result);
2719}
2720
2721static u32 rtw8822c_dpk_gainloss(struct rtw_dev *rtwdev, u8 path)
2722{
2723 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2724 u8 tx_agc, tx_bb, ori_txbb, ori_txagc, tx_agc_search, t1, t2;
2725
2726 ori_txbb = rtw8822c_dpk_rf_setting(rtwdev, path);
2727 ori_txagc = (u8)rtw_read_rf(rtwdev, path, RF_MODE_TRXAGC, BIT_TXAGC);
2728
2729 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path);
2730 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC);
2731 rtw8822c_dpk_dgain_read(rtwdev, path);
2732
2733 if (rtw8822c_dpk_dc_corr_check(rtwdev, path)) {
2734 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path);
2735 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DAGC);
2736 rtw8822c_dpk_dc_corr_check(rtwdev, path);
2737 }
2738
2739 t1 = rtw8822c_dpk_thermal_read(rtwdev, path);
2740 tx_bb = rtw8822c_dpk_pas_agc(rtwdev, path, false, true);
2741 tx_agc_search = rtw8822c_dpk_gainloss_result(rtwdev, path);
2742
2743 if (tx_bb < tx_agc_search)
2744 tx_bb = 0;
2745 else
2746 tx_bb = tx_bb - tx_agc_search;
2747
2748 rtw_write_rf(rtwdev, path, RF_TX_GAIN, BIT_GAIN_TXBB, tx_bb);
2749
2750 tx_agc = ori_txagc - (ori_txbb - tx_bb);
2751
2752 t2 = rtw8822c_dpk_thermal_read(rtwdev, path);
2753
2754 dpk_info->thermal_dpk_delta[path] = abs(t2 - t1);
2755
2756 return tx_agc;
2757}
2758
2759static u8 rtw8822c_dpk_by_path(struct rtw_dev *rtwdev, u32 tx_agc, u8 path)
2760{
2761 u8 result;
2762
2763 result = rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DO_DPK);
2764
2765 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1));
2766
2767 result = result | (u8)rtw_read32_mask(rtwdev, REG_DPD_CTL1_S0, BIT(26));
2768
2769 rtw_write_rf(rtwdev, path, RF_MODE_TRXAGC, RFREG_MASK, 0x33e14);
2770
2771 rtw8822c_dpk_get_coef(rtwdev, path);
2772
2773 return result;
2774}
2775
2776static void rtw8822c_dpk_cal_gs(struct rtw_dev *rtwdev, u8 path)
2777{
2778 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2779 u32 tmp_gs = 0;
2780
2781 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1));
2782 rtw_write32_mask(rtwdev, REG_IQK_CTL1, BIT_BYPASS_DPD, 0x0);
2783 rtw_write32_mask(rtwdev, REG_IQK_CTL1, BIT_TX_CFIR, 0x0);
2784 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_IQ_SWITCH, 0x9);
2785 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_INNER_LB, 0x1);
2786 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc);
2787 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, BIT_DPD_CLK, 0xf);
2788
2789 if (path == RF_PATH_A) {
2790 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0, BIT_GS_PWSF,
2791 0x1066680);
2792 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0, BIT_DPD_EN, 0x1);
2793 } else {
2794 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S1, BIT_GS_PWSF,
2795 0x1066680);
2796 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S1, BIT_DPD_EN, 0x1);
2797 }
2798
2799 if (dpk_info->dpk_bw == DPK_CHANNEL_WIDTH_80) {
2800 rtw_write32(rtwdev, REG_DPD_CTL16, 0x80001310);
2801 rtw_write32(rtwdev, REG_DPD_CTL16, 0x00001310);
2802 rtw_write32(rtwdev, REG_DPD_CTL16, 0x810000db);
2803 rtw_write32(rtwdev, REG_DPD_CTL16, 0x010000db);
2804 rtw_write32(rtwdev, REG_DPD_CTL16, 0x0000b428);
2805 rtw_write32(rtwdev, REG_DPD_CTL15,
2806 0x05020000 | (BIT(path) << 28));
2807 } else {
2808 rtw_write32(rtwdev, REG_DPD_CTL16, 0x8200190c);
2809 rtw_write32(rtwdev, REG_DPD_CTL16, 0x0200190c);
2810 rtw_write32(rtwdev, REG_DPD_CTL16, 0x8301ee14);
2811 rtw_write32(rtwdev, REG_DPD_CTL16, 0x0301ee14);
2812 rtw_write32(rtwdev, REG_DPD_CTL16, 0x0000b428);
2813 rtw_write32(rtwdev, REG_DPD_CTL15,
2814 0x05020008 | (BIT(path) << 28));
2815 }
2816
2817 rtw_write32_mask(rtwdev, REG_DPD_CTL0, MASKBYTE3, 0x8 | path);
2818
2819 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_CAL_PWR);
2820
2821 rtw_write32_mask(rtwdev, REG_DPD_CTL15, MASKBYTE3, 0x0);
2822 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1));
2823 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_IQ_SWITCH, 0x0);
2824 rtw_write32_mask(rtwdev, REG_R_CONFIG, BIT_INNER_LB, 0x0);
2825 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc);
2826
2827 if (path == RF_PATH_A)
2828 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0, BIT_GS_PWSF, 0x5b);
2829 else
2830 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S1, BIT_GS_PWSF, 0x5b);
2831
2832 rtw_write32_mask(rtwdev, REG_RXSRAM_CTL, BIT_RPT_SEL, 0x0);
2833
2834 tmp_gs = (u16)rtw_read32_mask(rtwdev, REG_STAT_RPT, BIT_RPT_DGAIN);
2835 tmp_gs = (tmp_gs * 910) >> 10;
2836 tmp_gs = DIV_ROUND_CLOSEST(tmp_gs, 10);
2837
2838 if (path == RF_PATH_A)
2839 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0, BIT_GS_PWSF, tmp_gs);
2840 else
2841 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S1, BIT_GS_PWSF, tmp_gs);
2842
2843 dpk_info->dpk_gs[path] = tmp_gs;
2844}
2845
2846void rtw8822c_dpk_cal_coef1(struct rtw_dev *rtwdev)
2847{
2848 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2849 u32 offset[DPK_RF_PATH_NUM] = {0, 0x58};
2850 u32 i_scaling;
2851 u8 path;
2852
2853 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x0000000c);
2854 rtw_write32(rtwdev, REG_RXSRAM_CTL, 0x000000f0);
2855 rtw_write32(rtwdev, REG_NCTL0, 0x00001148);
2856 rtw_write32(rtwdev, REG_NCTL0, 0x00001149);
2857
2858 check_hw_ready(rtwdev, 0x2d9c, MASKBYTE0, 0x55);
2859
2860 rtw_write8(rtwdev, 0x1b10, 0x0);
2861 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x0000000c);
2862
2863 for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
2864 i_scaling = 0x16c00 / dpk_info->dpk_gs[path];
2865
2866 rtw_write32_mask(rtwdev, 0x1b18 + offset[path], MASKHWORD,
2867 i_scaling);
2868 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path],
2869 GENMASK(31, 28), 0x9);
2870 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path],
2871 GENMASK(31, 28), 0x1);
2872 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0 + offset[path],
2873 GENMASK(31, 28), 0x0);
2874 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0 + offset[path],
2875 BIT(14), 0x0);
2876 }
2877}
2878
2879static void rtw8822c_dpk_on(struct rtw_dev *rtwdev, u8 path)
2880{
2881 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2882
2883 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DPK_ON);
2884
2885 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x8 | (path << 1));
2886 rtw_write32_mask(rtwdev, REG_IQK_CTL1, BIT_TX_CFIR, 0x0);
2887
2888 if (test_bit(path, dpk_info->dpk_path_ok))
2889 rtw8822c_dpk_cal_gs(rtwdev, path);
2890}
2891
2892static bool rtw8822c_dpk_check_pass(struct rtw_dev *rtwdev, bool is_fail,
2893 u32 dpk_txagc, u8 path)
2894{
2895 bool result;
2896
2897 if (!is_fail) {
2898 if (rtw8822c_dpk_coef_read(rtwdev, path))
2899 result = true;
2900 else
2901 result = false;
2902 } else {
2903 result = false;
2904 }
2905
2906 rtw8822c_dpk_fill_result(rtwdev, dpk_txagc, path, result);
2907
2908 return result;
2909}
2910
2911static void rtw8822c_dpk_result_reset(struct rtw_dev *rtwdev)
2912{
2913 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2914 u8 path;
2915
2916 for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
2917 clear_bit(path, dpk_info->dpk_path_ok);
2918 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE,
2919 0x8 | (path << 1));
2920 rtw_write32_mask(rtwdev, 0x1b58, 0x0000007f, 0x0);
2921
2922 dpk_info->dpk_txagc[path] = 0;
2923 dpk_info->result[path] = 0;
2924 dpk_info->dpk_gs[path] = 0x5b;
2925 dpk_info->pre_pwsf[path] = 0;
2926 dpk_info->thermal_dpk[path] = rtw8822c_dpk_thermal_read(rtwdev,
2927 path);
2928 }
2929}
2930
2931static void rtw8822c_dpk_calibrate(struct rtw_dev *rtwdev, u8 path)
2932{
2933 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2934 u32 dpk_txagc;
2935 u8 dpk_fail;
2936
2937 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] s%d dpk start\n", path);
2938
2939 dpk_txagc = rtw8822c_dpk_gainloss(rtwdev, path);
2940
2941 dpk_fail = rtw8822c_dpk_by_path(rtwdev, dpk_txagc, path);
2942
2943 if (!rtw8822c_dpk_check_pass(rtwdev, dpk_fail, dpk_txagc, path))
2944 rtw_err(rtwdev, "failed to do dpk calibration\n");
2945
2946 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] s%d dpk finish\n", path);
2947
2948 if (dpk_info->result[path])
2949 set_bit(path, dpk_info->dpk_path_ok);
2950}
2951
2952static void rtw8822c_dpk_path_select(struct rtw_dev *rtwdev)
2953{
2954 rtw8822c_dpk_calibrate(rtwdev, RF_PATH_A);
2955 rtw8822c_dpk_calibrate(rtwdev, RF_PATH_B);
2956 rtw8822c_dpk_on(rtwdev, RF_PATH_A);
2957 rtw8822c_dpk_on(rtwdev, RF_PATH_B);
2958 rtw8822c_dpk_cal_coef1(rtwdev);
2959}
2960
2961static void rtw8822c_dpk_enable_disable(struct rtw_dev *rtwdev)
2962{
2963 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2964 u32 mask = BIT(15) | BIT(14);
2965
2966 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc);
2967
2968 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0, BIT_DPD_EN,
2969 dpk_info->is_dpk_pwr_on);
2970 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S1, BIT_DPD_EN,
2971 dpk_info->is_dpk_pwr_on);
2972
2973 if (test_bit(RF_PATH_A, dpk_info->dpk_path_ok)) {
2974 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S0, mask, 0x0);
2975 rtw_write8(rtwdev, REG_DPD_CTL0_S0, dpk_info->dpk_gs[RF_PATH_A]);
2976 }
2977 if (test_bit(RF_PATH_B, dpk_info->dpk_path_ok)) {
2978 rtw_write32_mask(rtwdev, REG_DPD_CTL1_S1, mask, 0x0);
2979 rtw_write8(rtwdev, REG_DPD_CTL0_S1, dpk_info->dpk_gs[RF_PATH_B]);
2980 }
2981}
2982
2983static void rtw8822c_dpk_reload_data(struct rtw_dev *rtwdev)
2984{
2985 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
2986 u8 path;
2987
2988 if (!test_bit(RF_PATH_A, dpk_info->dpk_path_ok) &&
2989 !test_bit(RF_PATH_B, dpk_info->dpk_path_ok) &&
2990 dpk_info->dpk_ch == 0)
2991 return;
2992
2993 for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
2994 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE,
2995 0x8 | (path << 1));
2996 if (dpk_info->dpk_band == RTW_BAND_2G)
2997 rtw_write32(rtwdev, REG_DPD_LUT3, 0x1f100000);
2998 else
2999 rtw_write32(rtwdev, REG_DPD_LUT3, 0x1f0d0000);
3000
3001 rtw_write8(rtwdev, REG_DPD_AGC, dpk_info->dpk_txagc[path]);
3002
3003 rtw8822c_dpk_coef_write(rtwdev, path,
3004 test_bit(path, dpk_info->dpk_path_ok));
3005
3006 rtw8822c_dpk_one_shot(rtwdev, path, RTW_DPK_DPK_ON);
3007
3008 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0xc);
3009
3010 if (path == RF_PATH_A)
3011 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S0, BIT_GS_PWSF,
3012 dpk_info->dpk_gs[path]);
3013 else
3014 rtw_write32_mask(rtwdev, REG_DPD_CTL0_S1, BIT_GS_PWSF,
3015 dpk_info->dpk_gs[path]);
3016 }
3017 rtw8822c_dpk_cal_coef1(rtwdev);
3018}
3019
3020static bool rtw8822c_dpk_reload(struct rtw_dev *rtwdev)
3021{
3022 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
3023 u8 channel;
3024
3025 dpk_info->is_reload = false;
3026
3027 channel = (u8)(rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK) & 0xff);
3028
3029 if (channel == dpk_info->dpk_ch) {
3030 rtw_dbg(rtwdev, RTW_DBG_RFK,
3031 "[DPK] DPK reload for CH%d!!\n", dpk_info->dpk_ch);
3032 rtw8822c_dpk_reload_data(rtwdev);
3033 dpk_info->is_reload = true;
3034 }
3035
3036 return dpk_info->is_reload;
3037}
3038
3039static void rtw8822c_do_dpk(struct rtw_dev *rtwdev)
3040{
3041 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
3042 struct rtw_backup_info bckp[DPK_BB_REG_NUM];
3043 u32 rf_reg_backup[DPK_RF_REG_NUM][DPK_RF_PATH_NUM];
3044 u32 bb_reg[DPK_BB_REG_NUM] = {
3045 0x520, 0x820, 0x824, 0x1c3c, 0x1d58, 0x1864,
3046 0x4164, 0x180c, 0x410c, 0x186c, 0x416c,
3047 0x1a14, 0x1e70, 0x80c, 0x1d70, 0x1e7c, 0x18a4, 0x41a4};
3048 u32 rf_reg[DPK_RF_REG_NUM] = {
3049 0x0, 0x1a, 0x55, 0x63, 0x87, 0x8f, 0xde};
3050 u8 path;
3051
3052 if (!dpk_info->is_dpk_pwr_on) {
3053 rtw_dbg(rtwdev, RTW_DBG_RFK, "[DPK] Skip DPK due to DPD PWR off\n");
3054 return;
3055 } else if (rtw8822c_dpk_reload(rtwdev)) {
3056 return;
3057 }
3058
3059 for (path = RF_PATH_A; path < DPK_RF_PATH_NUM; path++)
3060 ewma_thermal_init(&dpk_info->avg_thermal[path]);
3061
3062 rtw8822c_dpk_information(rtwdev);
3063
3064 rtw8822c_dpk_backup_registers(rtwdev, bb_reg, DPK_BB_REG_NUM, bckp);
3065 rtw8822c_dpk_backup_rf_registers(rtwdev, rf_reg, rf_reg_backup);
3066
3067 rtw8822c_dpk_mac_bb_setting(rtwdev);
3068 rtw8822c_dpk_afe_setting(rtwdev, true);
3069 rtw8822c_dpk_pre_setting(rtwdev);
3070 rtw8822c_dpk_result_reset(rtwdev);
3071 rtw8822c_dpk_path_select(rtwdev);
3072 rtw8822c_dpk_afe_setting(rtwdev, false);
3073 rtw8822c_dpk_enable_disable(rtwdev);
3074
3075 rtw8822c_dpk_reload_rf_registers(rtwdev, rf_reg, rf_reg_backup);
3076 for (path = 0; path < rtwdev->hal.rf_path_num; path++)
3077 rtw8822c_dpk_rxbb_dc_cal(rtwdev, path);
3078 rtw8822c_dpk_restore_registers(rtwdev, DPK_BB_REG_NUM, bckp);
3079}
3080
3081static void rtw8822c_phy_calibration(struct rtw_dev *rtwdev)
3082{
3083 rtw8822c_do_iqk(rtwdev);
3084 rtw8822c_do_dpk(rtwdev);
3085}
3086
3087void rtw8822c_dpk_track(struct rtw_dev *rtwdev)
3088{
3089 struct rtw_dpk_info *dpk_info = &rtwdev->dm_info.dpk_info;
3090 u8 path;
3091 u8 thermal_value[DPK_RF_PATH_NUM] = {0};
3092 s8 offset[DPK_RF_PATH_NUM], delta_dpk[DPK_RF_PATH_NUM];
3093
3094 if (dpk_info->thermal_dpk[0] == 0 && dpk_info->thermal_dpk[1] == 0)
3095 return;
3096
3097 for (path = 0; path < DPK_RF_PATH_NUM; path++) {
3098 thermal_value[path] = rtw8822c_dpk_thermal_read(rtwdev, path);
3099 ewma_thermal_add(&dpk_info->avg_thermal[path],
3100 thermal_value[path]);
3101 thermal_value[path] =
3102 ewma_thermal_read(&dpk_info->avg_thermal[path]);
3103 delta_dpk[path] = dpk_info->thermal_dpk[path] -
3104 thermal_value[path];
3105 offset[path] = delta_dpk[path] -
3106 dpk_info->thermal_dpk_delta[path];
3107 offset[path] &= 0x7f;
3108
3109 if (offset[path] != dpk_info->pre_pwsf[path]) {
3110 rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE,
3111 0x8 | (path << 1));
3112 rtw_write32_mask(rtwdev, 0x1b58, GENMASK(6, 0),
3113 offset[path]);
3114 dpk_info->pre_pwsf[path] = offset[path];
3115 }
3116 }
3117}
3118
3119static const struct rtw_phy_cck_pd_reg
3120rtw8822c_cck_pd_reg[RTW_CHANNEL_WIDTH_40 + 1][RTW_RF_PATH_MAX] = {
3121 {
3122 {0x1ac8, 0x00ff, 0x1ad0, 0x01f},
3123 {0x1ac8, 0xff00, 0x1ad0, 0x3e0}
3124 },
3125 {
3126 {0x1acc, 0x00ff, 0x1ad0, 0x01F00000},
3127 {0x1acc, 0xff00, 0x1ad0, 0x3E000000}
3128 },
3129};
3130
3131#define RTW_CCK_PD_MAX 255
3132#define RTW_CCK_CS_MAX 31
3133#define RTW_CCK_CS_ERR1 27
3134#define RTW_CCK_CS_ERR2 29
3135static void
3136rtw8822c_phy_cck_pd_set_reg(struct rtw_dev *rtwdev,
3137 s8 pd_diff, s8 cs_diff, u8 bw, u8 nrx)
3138{
3139 u32 pd, cs;
3140
3141 if (WARN_ON(bw > RTW_CHANNEL_WIDTH_40 || nrx >= RTW_RF_PATH_MAX))
3142 return;
3143
3144 pd = rtw_read32_mask(rtwdev,
3145 rtw8822c_cck_pd_reg[bw][nrx].reg_pd,
3146 rtw8822c_cck_pd_reg[bw][nrx].mask_pd);
3147 cs = rtw_read32_mask(rtwdev,
3148 rtw8822c_cck_pd_reg[bw][nrx].reg_cs,
3149 rtw8822c_cck_pd_reg[bw][nrx].mask_cs);
3150 pd += pd_diff;
3151 cs += cs_diff;
3152 if (pd > RTW_CCK_PD_MAX)
3153 pd = RTW_CCK_PD_MAX;
3154 if (cs == RTW_CCK_CS_ERR1 || cs == RTW_CCK_CS_ERR2)
3155 cs++;
3156 else if (cs > RTW_CCK_CS_MAX)
3157 cs = RTW_CCK_CS_MAX;
3158 rtw_write32_mask(rtwdev,
3159 rtw8822c_cck_pd_reg[bw][nrx].reg_pd,
3160 rtw8822c_cck_pd_reg[bw][nrx].mask_pd,
3161 pd);
3162 rtw_write32_mask(rtwdev,
3163 rtw8822c_cck_pd_reg[bw][nrx].reg_cs,
3164 rtw8822c_cck_pd_reg[bw][nrx].mask_cs,
3165 cs);
3166}
3167
3168static void rtw8822c_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl)
3169{
3170 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
3171 s8 pd_lvl[4] = {2, 4, 6, 8};
3172 s8 cs_lvl[4] = {2, 2, 2, 4};
3173 u8 cur_lvl;
3174 u8 nrx, bw;
3175
3176 nrx = (u8)rtw_read32_mask(rtwdev, 0x1a2c, 0x60000);
3177 bw = (u8)rtw_read32_mask(rtwdev, 0x9b0, 0xc);
3178
3179 if (dm_info->cck_pd_lv[bw][nrx] == new_lvl)
3180 return;
3181
3182 cur_lvl = dm_info->cck_pd_lv[bw][nrx];
3183
3184 /* update cck pd info */
3185 dm_info->cck_fa_avg = CCK_FA_AVG_RESET;
3186
3187 rtw8822c_phy_cck_pd_set_reg(rtwdev,
3188 pd_lvl[new_lvl] - pd_lvl[cur_lvl],
3189 cs_lvl[new_lvl] - cs_lvl[cur_lvl],
3190 bw, nrx);
3191 dm_info->cck_pd_lv[bw][nrx] = new_lvl;
3192}
3193
2032static struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8822c[] = { 3194static struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8822c[] = {
2033 {0x0086, 3195 {0x0086,
2034 RTW_PWR_CUT_ALL_MSK, 3196 RTW_PWR_CUT_ALL_MSK,
@@ -2275,6 +3437,16 @@ static struct rtw_pwr_seq_cmd trans_cardemu_to_carddis_8822c[] = {
2275 RTW_PWR_INTF_ALL_MSK, 3437 RTW_PWR_INTF_ALL_MSK,
2276 RTW_PWR_ADDR_MAC, 3438 RTW_PWR_ADDR_MAC,
2277 RTW_PWR_CMD_WRITE, BIT(1), 0}, 3439 RTW_PWR_CMD_WRITE, BIT(1), 0},
3440 {0x0092,
3441 RTW_PWR_CUT_ALL_MSK,
3442 RTW_PWR_INTF_PCI_MSK,
3443 RTW_PWR_ADDR_MAC,
3444 RTW_PWR_CMD_WRITE, 0xFF, 0x20},
3445 {0x0093,
3446 RTW_PWR_CUT_ALL_MSK,
3447 RTW_PWR_INTF_PCI_MSK,
3448 RTW_PWR_ADDR_MAC,
3449 RTW_PWR_CMD_WRITE, 0xFF, 0x04},
2278 {0x0005, 3450 {0x0005,
2279 RTW_PWR_CUT_ALL_MSK, 3451 RTW_PWR_CUT_ALL_MSK,
2280 RTW_PWR_INTF_USB_MSK | RTW_PWR_INTF_SDIO_MSK, 3452 RTW_PWR_INTF_USB_MSK | RTW_PWR_INTF_SDIO_MSK,
@@ -2396,7 +3568,9 @@ static struct rtw_chip_ops rtw8822c_ops = {
2396 .set_tx_power_index = rtw8822c_set_tx_power_index, 3568 .set_tx_power_index = rtw8822c_set_tx_power_index,
2397 .cfg_ldo25 = rtw8822c_cfg_ldo25, 3569 .cfg_ldo25 = rtw8822c_cfg_ldo25,
2398 .false_alarm_statistics = rtw8822c_false_alarm_statistics, 3570 .false_alarm_statistics = rtw8822c_false_alarm_statistics,
2399 .do_iqk = rtw8822c_do_iqk, 3571 .dpk_track = rtw8822c_dpk_track,
3572 .phy_calibration = rtw8822c_phy_calibration,
3573 .cck_pd_set = rtw8822c_phy_cck_pd_set,
2400 3574
2401 .coex_set_init = rtw8822c_coex_cfg_init, 3575 .coex_set_init = rtw8822c_coex_cfg_init,
2402 .coex_set_ant_switch = NULL, 3576 .coex_set_ant_switch = NULL,
@@ -2589,6 +3763,8 @@ struct rtw_chip_info rtw8822c_hw_spec = {
2589 .rf_tbl = {&rtw8822c_rf_a_tbl, &rtw8822c_rf_b_tbl}, 3763 .rf_tbl = {&rtw8822c_rf_a_tbl, &rtw8822c_rf_b_tbl},
2590 .rfe_defs = rtw8822c_rfe_defs, 3764 .rfe_defs = rtw8822c_rfe_defs,
2591 .rfe_defs_size = ARRAY_SIZE(rtw8822c_rfe_defs), 3765 .rfe_defs_size = ARRAY_SIZE(rtw8822c_rfe_defs),
3766 .en_dis_dpd = true,
3767 .dpd_ratemask = DIS_DPD_RATEALL,
2592 3768
2593 .coex_para_ver = 0x19062706, 3769 .coex_para_ver = 0x19062706,
2594 .bt_desired_ver = 0x6, 3770 .bt_desired_ver = 0x6,
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
index 5ee1de41504d..438db74d8e7a 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
@@ -96,6 +96,35 @@ struct rtw8822c_efuse {
96 }; 96 };
97}; 97};
98 98
99enum rtw8822c_dpk_agc_phase {
100 RTW_DPK_GAIN_CHECK,
101 RTW_DPK_GAIN_LARGE,
102 RTW_DPK_GAIN_LESS,
103 RTW_DPK_GL_LARGE,
104 RTW_DPK_GL_LESS,
105 RTW_DPK_LOSS_CHECK,
106 RTW_DPK_AGC_OUT,
107};
108
109enum rtw8822c_dpk_one_shot_action {
110 RTW_DPK_CAL_PWR,
111 RTW_DPK_GAIN_LOSS,
112 RTW_DPK_DO_DPK,
113 RTW_DPK_DPK_ON,
114 RTW_DPK_DAGC,
115 RTW_DPK_ACTION_MAX
116};
117
118void rtw8822c_parse_tbl_dpk(struct rtw_dev *rtwdev,
119 const struct rtw_table *tbl);
120
121#define RTW_DECL_TABLE_DPK(name) \
122const struct rtw_table name ## _tbl = { \
123 .data = name, \
124 .size = ARRAY_SIZE(name), \
125 .parse = rtw8822c_parse_tbl_dpk, \
126}
127
99#define DACK_PATH_8822C 2 128#define DACK_PATH_8822C 2
100#define DACK_REG_8822C 16 129#define DACK_REG_8822C 16
101#define DACK_RF_8822C 1 130#define DACK_RF_8822C 1
@@ -176,6 +205,7 @@ struct rtw8822c_efuse {
176#define REG_TXF7 0x1ab0 205#define REG_TXF7 0x1ab0
177#define REG_CCK_SOURCE 0x1abc 206#define REG_CCK_SOURCE 0x1abc
178#define BIT_NBI_EN BIT(30) 207#define BIT_NBI_EN BIT(30)
208#define REG_IQKSTAT 0x1b10
179#define REG_TXANT 0x1c28 209#define REG_TXANT 0x1c28
180#define REG_ENCCK 0x1c3c 210#define REG_ENCCK 0x1c3c
181#define BIT_CCK_BLK_EN BIT(1) 211#define BIT_CCK_BLK_EN BIT(1)
@@ -197,6 +227,7 @@ struct rtw8822c_efuse {
197#define REG_OFDM_FACNT3 0x2d0c 227#define REG_OFDM_FACNT3 0x2d0c
198#define REG_OFDM_FACNT4 0x2d10 228#define REG_OFDM_FACNT4 0x2d10
199#define REG_OFDM_FACNT5 0x2d20 229#define REG_OFDM_FACNT5 0x2d20
230#define REG_RPT_CIP 0x2d9c
200#define REG_OFDM_TXCNT 0x2de0 231#define REG_OFDM_TXCNT 0x2de0
201#define REG_ORITXCODE2 0x4100 232#define REG_ORITXCODE2 0x4100
202#define REG_3WIRE2 0x410c 233#define REG_3WIRE2 0x410c
@@ -206,4 +237,59 @@ struct rtw8822c_efuse {
206#define REG_DCKB_Q_0 0x41d8 237#define REG_DCKB_Q_0 0x41d8
207#define REG_DCKB_Q_1 0x41dc 238#define REG_DCKB_Q_1 0x41dc
208 239
240#define RF_MODE_TRXAGC 0x00
241#define RF_RXAGC_OFFSET 0x19
242#define RF_BW_TRXBB 0x1a
243#define RF_TX_GAIN_OFFSET 0x55
244#define RF_TX_GAIN 0x56
245#define RF_TXA_LB_SW 0x63
246#define RF_RXG_GAIN 0x87
247#define RF_RXA_MIX_GAIN 0x8a
248#define RF_EXT_TIA_BW 0x8f
249#define RF_DEBUG 0xde
250
251#define REG_NCTL0 0x1b00
252#define REG_DPD_CTL0_S0 0x1b04
253#define REG_DPD_CTL1_S0 0x1b08
254#define REG_IQK_CTL1 0x1b20
255#define REG_DPD_LUT0 0x1b44
256#define REG_DPD_CTL0_S1 0x1b5c
257#define REG_DPD_LUT3 0x1b60
258#define REG_DPD_CTL1_S1 0x1b60
259#define REG_DPD_AGC 0x1b67
260#define REG_DPD_CTL0 0x1bb4
261#define REG_R_CONFIG 0x1bcc
262#define REG_RXSRAM_CTL 0x1bd4
263#define REG_DPD_CTL11 0x1be4
264#define REG_DPD_CTL12 0x1be8
265#define REG_DPD_CTL15 0x1bf4
266#define REG_DPD_CTL16 0x1bf8
267#define REG_STAT_RPT 0x1bfc
268
269#define BIT_EXT_TIA_BW BIT(1)
270#define BIT_DE_TRXBW BIT(2)
271#define BIT_DE_TX_GAIN BIT(16)
272#define BIT_RXG_GAIN BIT(18)
273#define BIT_DE_PWR_TRIM BIT(19)
274#define BIT_INNER_LB BIT(21)
275#define BIT_BYPASS_DPD BIT(25)
276#define BIT_DPD_EN BIT(31)
277#define BIT_SUBPAGE GENMASK(3, 0)
278#define BIT_TXAGC GENMASK(4, 0)
279#define BIT_GAIN_TXBB GENMASK(4, 0)
280#define BIT_LB_ATT GENMASK(4, 2)
281#define BIT_RXA_MIX_GAIN GENMASK(4, 3)
282#define BIT_IQ_SWITCH GENMASK(5, 0)
283#define BIT_DPD_CLK GENMASK(7, 4)
284#define BIT_RXAGC GENMASK(9, 5)
285#define BIT_BW_RXBB GENMASK(11, 10)
286#define BIT_LB_SW GENMASK(13, 12)
287#define BIT_BW_TXBB GENMASK(14, 12)
288#define BIT_GLOSS_DB GENMASK(14, 12)
289#define BIT_TXA_LB_ATT GENMASK(15, 14)
290#define BIT_TX_OFFSET_VAL GENMASK(18, 14)
291#define BIT_RPT_SEL GENMASK(20, 16)
292#define BIT_GS_PWSF GENMASK(27, 0)
293#define BIT_RPT_DGAIN GENMASK(27, 16)
294#define BIT_TX_CFIR GENMASK(31, 30)
209#endif 295#endif
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c_table.c b/drivers/net/wireless/realtek/rtw88/rtw8822c_table.c
index 6c7eaa75b98b..e2dd4c766077 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c_table.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c_table.c
@@ -4,6 +4,7 @@
4 4
5#include "main.h" 5#include "main.h"
6#include "phy.h" 6#include "phy.h"
7#include "rtw8822c.h"
7#include "rtw8822c_table.h" 8#include "rtw8822c_table.h"
8 9
9static const u32 rtw8822c_mac[] = { 10static const u32 rtw8822c_mac[] = {
@@ -13,69 +14,69 @@ RTW_DECL_TABLE_PHY_COND(rtw8822c_mac, rtw_phy_cfg_mac);
13 14
14static const u32 rtw8822c_agc[] = { 15static const u32 rtw8822c_agc[] = {
15 0x1D90, 0x300001FF, 16 0x1D90, 0x300001FF,
16 0x1D90, 0x300101FF, 17 0x1D90, 0x300101FE,
17 0x1D90, 0x300201FE, 18 0x1D90, 0x300201FD,
18 0x1D90, 0x300301FD, 19 0x1D90, 0x300301FC,
19 0x1D90, 0x300401FC, 20 0x1D90, 0x300401FB,
20 0x1D90, 0x300501FB, 21 0x1D90, 0x300501FA,
21 0x1D90, 0x300601FA, 22 0x1D90, 0x300601F9,
22 0x1D90, 0x300701F9, 23 0x1D90, 0x300701F8,
23 0x1D90, 0x300801F8, 24 0x1D90, 0x300801F7,
24 0x1D90, 0x300901F7, 25 0x1D90, 0x300901F6,
25 0x1D90, 0x300A01F6, 26 0x1D90, 0x300A01F5,
26 0x1D90, 0x300B01F5, 27 0x1D90, 0x300B01F4,
27 0x1D90, 0x300C01F4, 28 0x1D90, 0x300C01F3,
28 0x1D90, 0x300D01F3, 29 0x1D90, 0x300D01F2,
29 0x1D90, 0x300E01F2, 30 0x1D90, 0x300E01F1,
30 0x1D90, 0x300F01F1, 31 0x1D90, 0x300F01F0,
31 0x1D90, 0x301001F0, 32 0x1D90, 0x301001EF,
32 0x1D90, 0x301101EF, 33 0x1D90, 0x301101EE,
33 0x1D90, 0x301201EE, 34 0x1D90, 0x301201ED,
34 0x1D90, 0x301301ED, 35 0x1D90, 0x301301EC,
35 0x1D90, 0x301401EC, 36 0x1D90, 0x301401EB,
36 0x1D90, 0x301501EB, 37 0x1D90, 0x301501EA,
37 0x1D90, 0x30160192, 38 0x1D90, 0x301601E9,
38 0x1D90, 0x30170191, 39 0x1D90, 0x301701E8,
39 0x1D90, 0x30180190, 40 0x1D90, 0x301801E7,
40 0x1D90, 0x3019018F, 41 0x1D90, 0x301901E5,
41 0x1D90, 0x301A018E, 42 0x1D90, 0x301A01E4,
42 0x1D90, 0x301B018D, 43 0x1D90, 0x301B01C5,
43 0x1D90, 0x301C018C, 44 0x1D90, 0x301C01C4,
44 0x1D90, 0x301D018B, 45 0x1D90, 0x301D01C3,
45 0x1D90, 0x301E018A, 46 0x1D90, 0x301E01C2,
46 0x1D90, 0x301F0189, 47 0x1D90, 0x301F0188,
47 0x1D90, 0x30200188, 48 0x1D90, 0x30200187,
48 0x1D90, 0x30210187, 49 0x1D90, 0x30210186,
49 0x1D90, 0x30220186, 50 0x1D90, 0x30220184,
50 0x1D90, 0x30230185, 51 0x1D90, 0x30230183,
51 0x1D90, 0x3024014B, 52 0x1D90, 0x30240182,
52 0x1D90, 0x3025014A, 53 0x1D90, 0x30250181,
53 0x1D90, 0x30260149, 54 0x1D90, 0x30260148,
54 0x1D90, 0x30270148, 55 0x1D90, 0x30270147,
55 0x1D90, 0x30280147, 56 0x1D90, 0x30280146,
56 0x1D90, 0x30290146, 57 0x1D90, 0x30290144,
57 0x1D90, 0x302A0145, 58 0x1D90, 0x302A0143,
58 0x1D90, 0x302B0144, 59 0x1D90, 0x302B0142,
59 0x1D90, 0x302C0143, 60 0x1D90, 0x302C0141,
60 0x1D90, 0x302D0142, 61 0x1D90, 0x302D00C8,
61 0x1D90, 0x302E00C8, 62 0x1D90, 0x302E00C7,
62 0x1D90, 0x302F00C7, 63 0x1D90, 0x302F00C6,
63 0x1D90, 0x303000C6, 64 0x1D90, 0x303000C5,
64 0x1D90, 0x303100C5, 65 0x1D90, 0x303100C4,
65 0x1D90, 0x303200C4, 66 0x1D90, 0x303200C3,
66 0x1D90, 0x30330088, 67 0x1D90, 0x30330048,
67 0x1D90, 0x30340087, 68 0x1D90, 0x30340047,
68 0x1D90, 0x30350086, 69 0x1D90, 0x30350046,
69 0x1D90, 0x30360045, 70 0x1D90, 0x30360045,
70 0x1D90, 0x30370044, 71 0x1D90, 0x30370025,
71 0x1D90, 0x30380043, 72 0x1D90, 0x30380024,
72 0x1D90, 0x30390023, 73 0x1D90, 0x30390023,
73 0x1D90, 0x303A0022, 74 0x1D90, 0x303A0022,
74 0x1D90, 0x303B0021, 75 0x1D90, 0x303B0021,
75 0x1D90, 0x303C0020, 76 0x1D90, 0x303C0020,
76 0x1D90, 0x303D0002, 77 0x1D90, 0x303D0003,
77 0x1D90, 0x303E0001, 78 0x1D90, 0x303E0002,
78 0x1D90, 0x303F0000, 79 0x1D90, 0x303F0001,
79 0x1D90, 0x304000FF, 80 0x1D90, 0x304000FF,
80 0x1D90, 0x304100FF, 81 0x1D90, 0x304100FF,
81 0x1D90, 0x304200FF, 82 0x1D90, 0x304200FF,
@@ -418,48 +419,48 @@ static const u32 rtw8822c_agc[] = {
418 0x1D90, 0x319301EB, 419 0x1D90, 0x319301EB,
419 0x1D90, 0x319401EA, 420 0x1D90, 0x319401EA,
420 0x1D90, 0x319501E9, 421 0x1D90, 0x319501E9,
421 0x1D90, 0x3196018F, 422 0x1D90, 0x319601E7,
422 0x1D90, 0x3197018E, 423 0x1D90, 0x319701E6,
423 0x1D90, 0x3198018D, 424 0x1D90, 0x319801E5,
424 0x1D90, 0x3199018C, 425 0x1D90, 0x319901E4,
425 0x1D90, 0x319A018B, 426 0x1D90, 0x319A01A8,
426 0x1D90, 0x319B018A, 427 0x1D90, 0x319B01A7,
427 0x1D90, 0x319C0189, 428 0x1D90, 0x319C01A6,
428 0x1D90, 0x319D0188, 429 0x1D90, 0x319D01A5,
429 0x1D90, 0x319E0187, 430 0x1D90, 0x319E0185,
430 0x1D90, 0x319F0186, 431 0x1D90, 0x319F0184,
431 0x1D90, 0x31A00185, 432 0x1D90, 0x31A00183,
432 0x1D90, 0x31A10184, 433 0x1D90, 0x31A10182,
433 0x1D90, 0x31A20183, 434 0x1D90, 0x31A20149,
434 0x1D90, 0x31A30182, 435 0x1D90, 0x31A30148,
435 0x1D90, 0x31A40149, 436 0x1D90, 0x31A40147,
436 0x1D90, 0x31A50148, 437 0x1D90, 0x31A50145,
437 0x1D90, 0x31A60147, 438 0x1D90, 0x31A60144,
438 0x1D90, 0x31A70146, 439 0x1D90, 0x31A70143,
439 0x1D90, 0x31A80145, 440 0x1D90, 0x31A80142,
440 0x1D90, 0x31A90144, 441 0x1D90, 0x31A900E6,
441 0x1D90, 0x31AA0143, 442 0x1D90, 0x31AA00E5,
442 0x1D90, 0x31AB0142, 443 0x1D90, 0x31AB00C9,
443 0x1D90, 0x31AC0141, 444 0x1D90, 0x31AC00C8,
444 0x1D90, 0x31AD0140, 445 0x1D90, 0x31AD00C7,
445 0x1D90, 0x31AE00C7, 446 0x1D90, 0x31AE00C6,
446 0x1D90, 0x31AF00C6, 447 0x1D90, 0x31AF00C5,
447 0x1D90, 0x31B000C5, 448 0x1D90, 0x31B000C4,
448 0x1D90, 0x31B100C4, 449 0x1D90, 0x31B100C3,
449 0x1D90, 0x31B200C3, 450 0x1D90, 0x31B20088,
450 0x1D90, 0x31B30088, 451 0x1D90, 0x31B30087,
451 0x1D90, 0x31B40087, 452 0x1D90, 0x31B40086,
452 0x1D90, 0x31B50086, 453 0x1D90, 0x31B50085,
453 0x1D90, 0x31B60045, 454 0x1D90, 0x31B60026,
454 0x1D90, 0x31B70044, 455 0x1D90, 0x31B70025,
455 0x1D90, 0x31B80043, 456 0x1D90, 0x31B80024,
456 0x1D90, 0x31B90023, 457 0x1D90, 0x31B90023,
457 0x1D90, 0x31BA0022, 458 0x1D90, 0x31BA0022,
458 0x1D90, 0x31BB0021, 459 0x1D90, 0x31BB0021,
459 0x1D90, 0x31BC0020, 460 0x1D90, 0x31BC0020,
460 0x1D90, 0x31BD0002, 461 0x1D90, 0x31BD0003,
461 0x1D90, 0x31BE0001, 462 0x1D90, 0x31BE0002,
462 0x1D90, 0x31BF0000, 463 0x1D90, 0x31BF0001,
463 0x1D70, 0x22222222, 464 0x1D70, 0x22222222,
464 0x1D70, 0x20202020, 465 0x1D70, 0x20202020,
465}; 466};
@@ -478,7 +479,7 @@ static const u32 rtw8822c_bb[] = {
478 0x814, 0x00904080, 479 0x814, 0x00904080,
479 0x818, 0xC30056F1, 480 0x818, 0xC30056F1,
480 0x81C, 0x00050000, 481 0x81C, 0x00050000,
481 0x820, 0x11111133, 482 0x820, 0x11111111,
482 0x824, 0xC3C3CCC4, 483 0x824, 0xC3C3CCC4,
483 0x828, 0x30FB186C, 484 0x828, 0x30FB186C,
484 0x82C, 0x185D6556, 485 0x82C, 0x185D6556,
@@ -604,7 +605,7 @@ static const u32 rtw8822c_bb[] = {
604 0xA14, 0x00000000, 605 0xA14, 0x00000000,
605 0xA18, 0x00000000, 606 0xA18, 0x00000000,
606 0xA1C, 0x00000000, 607 0xA1C, 0x00000000,
607 0xA20, 0xEB31B333, 608 0xA20, 0xCB31B333,
608 0xA24, 0x00275485, 609 0xA24, 0x00275485,
609 0xA28, 0x00166366, 610 0xA28, 0x00166366,
610 0xA2C, 0x00275485, 611 0xA2C, 0x00275485,
@@ -722,7 +723,7 @@ static const u32 rtw8822c_bb[] = {
722 0xBF0, 0x00000000, 723 0xBF0, 0x00000000,
723 0xBF4, 0x00000000, 724 0xBF4, 0x00000000,
724 0xBF8, 0x00000000, 725 0xBF8, 0x00000000,
725 0xC00, 0x1C8BA0D6, 726 0xC00, 0x0C8BA0D6,
726 0xC04, 0x00000001, 727 0xC04, 0x00000001,
727 0xC08, 0x00000000, 728 0xC08, 0x00000000,
728 0xC0C, 0x02F1D8B7, 729 0xC0C, 0x02F1D8B7,
@@ -774,8 +775,8 @@ static const u32 rtw8822c_bb[] = {
774 0xCC4, 0x00200400, 775 0xCC4, 0x00200400,
775 0xCC8, 0x0B200400, 776 0xCC8, 0x0B200400,
776 0xCCC, 0x00600400, 777 0xCCC, 0x00600400,
777 0xCD0, 0x00000092, 778 0xCD0, 0x22220092,
778 0xCD4, 0x22220000, 779 0xCD4, 0x22220707,
779 0xCD8, 0x22222222, 780 0xCD8, 0x22222222,
780 0xCDC, 0x22222222, 781 0xCDC, 0x22222222,
781 0xCE0, 0x22222222, 782 0xCE0, 0x22222222,
@@ -990,7 +991,7 @@ static const u32 rtw8822c_bb[] = {
990 0x1C34, 0xE4E42000, 991 0x1C34, 0xE4E42000,
991 0x1C38, 0xFFA1005E, 992 0x1C38, 0xFFA1005E,
992 0x1C40, 0x8F588837, 993 0x1C40, 0x8F588837,
993 0x1C44, 0x04400300, 994 0x1C44, 0x04400700,
994 0x1C48, 0x00000000, 995 0x1C48, 0x00000000,
995 0x1C4C, 0x00000200, 996 0x1C4C, 0x00000200,
996 0x1C50, 0x8E588837, 997 0x1C50, 0x8E588837,
@@ -1108,7 +1109,7 @@ static const u32 rtw8822c_bb[] = {
1108 0x1E20, 0x00000000, 1109 0x1E20, 0x00000000,
1109 0x1E24, 0x80003000, 1110 0x1E24, 0x80003000,
1110 0x1E28, 0x000CC0C3, 1111 0x1E28, 0x000CC0C3,
1111 0x1E2C, 0xE4E40404, 1112 0x1E2C, 0xE4E40000,
1112 0x1E30, 0xE4E4E4E4, 1113 0x1E30, 0xE4E4E4E4,
1113 0x1E34, 0xF3001234, 1114 0x1E34, 0xF3001234,
1114 0x1E38, 0x00000000, 1115 0x1E38, 0x00000000,
@@ -1124,7 +1125,7 @@ static const u32 rtw8822c_bb[] = {
1124 0x1E60, 0x00000000, 1125 0x1E60, 0x00000000,
1125 0x1E64, 0xF3A00001, 1126 0x1E64, 0xF3A00001,
1126 0x1E68, 0x0028846E, 1127 0x1E68, 0x0028846E,
1127 0x1E6C, 0x40274906, 1128 0x1E6C, 0x40374906,
1128 0x1E70, 0x00001000, 1129 0x1E70, 0x00001000,
1129 0x1E74, 0x00000000, 1130 0x1E74, 0x00000000,
1130 0x1E78, 0x00000000, 1131 0x1E78, 0x00000000,
@@ -1485,11 +1486,11 @@ static const u32 rtw8822c_bb[] = {
1485 0x1AD0, 0xA33529AD, 1486 0x1AD0, 0xA33529AD,
1486 0x1AD4, 0x0D8D8452, 1487 0x1AD4, 0x0D8D8452,
1487 0x1AD8, 0x08024024, 1488 0x1AD8, 0x08024024,
1488 0x1ADC, 0x000DB001, 1489 0x1ADC, 0x000D0001,
1489 0x1AE0, 0x00600391, 1490 0x1AE0, 0x00600391,
1490 0x1AE4, 0x08000080, 1491 0x1AE4, 0x08000080,
1491 0x1AE8, 0x00000002, 1492 0x1AE8, 0xC2100002,
1492 0x1AEC, 0x00000000, 1493 0x1AEC, 0x000000F6,
1493 0x1AF0, 0x00000000, 1494 0x1AF0, 0x00000000,
1494 0x1AF4, 0x00000000, 1495 0x1AF4, 0x00000000,
1495 0x1AF8, 0x00000000, 1496 0x1AF8, 0x00000000,
@@ -1756,6 +1757,7 @@ static const u32 rtw8822c_bb[] = {
1756 0x1D94, 0x40FF0000, 1757 0x1D94, 0x40FF0000,
1757 0xC0C, 0x02F1D8B7, 1758 0xC0C, 0x02F1D8B7,
1758 0x1EE8, 0x00000000, 1759 0x1EE8, 0x00000000,
1760
1759}; 1761};
1760 1762
1761RTW_DECL_TABLE_PHY_COND(rtw8822c_bb, rtw_phy_cfg_bb); 1763RTW_DECL_TABLE_PHY_COND(rtw8822c_bb, rtw_phy_cfg_bb);
@@ -1828,6 +1830,10 @@ static const u32 rtw8822c_rf_a[] = {
1828 0x08E, 0x000A5540, 1830 0x08E, 0x000A5540,
1829 0x93000002, 0x00000000, 0x40000000, 0x00000000, 1831 0x93000002, 0x00000000, 0x40000000, 0x00000000,
1830 0x08E, 0x000A5540, 1832 0x08E, 0x000A5540,
1833 0x93000003, 0x00000000, 0x40000000, 0x00000000,
1834 0x08E, 0x000A5540,
1835 0x93000004, 0x00000000, 0x40000000, 0x00000000,
1836 0x08E, 0x000A5540,
1831 0xA0000000, 0x00000000, 1837 0xA0000000, 0x00000000,
1832 0x08E, 0x000A5540, 1838 0x08E, 0x000A5540,
1833 0xB0000000, 0x00000000, 1839 0xB0000000, 0x00000000,
@@ -1846,6 +1852,10 @@ static const u32 rtw8822c_rf_a[] = {
1846 0x085, 0x0006A06C, 1852 0x085, 0x0006A06C,
1847 0x93000002, 0x00000000, 0x40000000, 0x00000000, 1853 0x93000002, 0x00000000, 0x40000000, 0x00000000,
1848 0x085, 0x0006A06C, 1854 0x085, 0x0006A06C,
1855 0x93000003, 0x00000000, 0x40000000, 0x00000000,
1856 0x085, 0x0006A06C,
1857 0x93000004, 0x00000000, 0x40000000, 0x00000000,
1858 0x085, 0x0006A06C,
1849 0xA0000000, 0x00000000, 1859 0xA0000000, 0x00000000,
1850 0x085, 0x0006A06C, 1860 0x085, 0x0006A06C,
1851 0xB0000000, 0x00000000, 1861 0xB0000000, 0x00000000,
@@ -1903,6 +1913,24 @@ static const u32 rtw8822c_rf_a[] = {
1903 0x033, 0x00000002, 1913 0x033, 0x00000002,
1904 0x03F, 0x0000002A, 1914 0x03F, 0x0000002A,
1905 0x0EE, 0x00000000, 1915 0x0EE, 0x00000000,
1916 0x93000003, 0x00000000, 0x40000000, 0x00000000,
1917 0x0EE, 0x00000010,
1918 0x033, 0x00000001,
1919 0x03F, 0x0000002A,
1920 0x033, 0x00000001,
1921 0x03F, 0x0000002A,
1922 0x033, 0x00000002,
1923 0x03F, 0x0000002A,
1924 0x0EE, 0x00000000,
1925 0x93000004, 0x00000000, 0x40000000, 0x00000000,
1926 0x0EE, 0x00000010,
1927 0x033, 0x00000001,
1928 0x03F, 0x0000002A,
1929 0x033, 0x00000001,
1930 0x03F, 0x0000002A,
1931 0x033, 0x00000002,
1932 0x03F, 0x0000002A,
1933 0x0EE, 0x00000000,
1906 0xA0000000, 0x00000000, 1934 0xA0000000, 0x00000000,
1907 0x0EE, 0x00000010, 1935 0x0EE, 0x00000010,
1908 0x033, 0x00000001, 1936 0x033, 0x00000001,
@@ -2069,6 +2097,58 @@ static const u32 rtw8822c_rf_a[] = {
2069 0x03F, 0x00000180, 2097 0x03F, 0x00000180,
2070 0x033, 0x00000004, 2098 0x033, 0x00000004,
2071 0x03F, 0x00000040, 2099 0x03F, 0x00000040,
2100 0x93000003, 0x00000000, 0x40000000, 0x00000000,
2101 0x0EF, 0x00010000,
2102 0x033, 0x0000000F,
2103 0x03F, 0x000773C0,
2104 0x033, 0x0000000E,
2105 0x03F, 0x000FF3C0,
2106 0x033, 0x0000000D,
2107 0x03F, 0x000773E8,
2108 0x033, 0x0000000C,
2109 0x03F, 0x000FF3E8,
2110 0x033, 0x0000000B,
2111 0x03F, 0x00000287,
2112 0x033, 0x0000000A,
2113 0x03F, 0x000002A8,
2114 0x033, 0x00000009,
2115 0x03F, 0x00000207,
2116 0x033, 0x00000008,
2117 0x03F, 0x000FF280,
2118 0x033, 0x00000007,
2119 0x03F, 0x00000200,
2120 0x033, 0x00000006,
2121 0x03F, 0x000001C0,
2122 0x033, 0x00000005,
2123 0x03F, 0x00000180,
2124 0x033, 0x00000004,
2125 0x03F, 0x00000040,
2126 0x93000004, 0x00000000, 0x40000000, 0x00000000,
2127 0x0EF, 0x00010000,
2128 0x033, 0x0000000F,
2129 0x03F, 0x000773C0,
2130 0x033, 0x0000000E,
2131 0x03F, 0x000FF3C0,
2132 0x033, 0x0000000D,
2133 0x03F, 0x000773E8,
2134 0x033, 0x0000000C,
2135 0x03F, 0x000FF3E8,
2136 0x033, 0x0000000B,
2137 0x03F, 0x00000287,
2138 0x033, 0x0000000A,
2139 0x03F, 0x000002A8,
2140 0x033, 0x00000009,
2141 0x03F, 0x00000207,
2142 0x033, 0x00000008,
2143 0x03F, 0x000FF280,
2144 0x033, 0x00000007,
2145 0x03F, 0x00000200,
2146 0x033, 0x00000006,
2147 0x03F, 0x000001C0,
2148 0x033, 0x00000005,
2149 0x03F, 0x00000180,
2150 0x033, 0x00000004,
2151 0x03F, 0x00000040,
2072 0xA0000000, 0x00000000, 2152 0xA0000000, 0x00000000,
2073 0x0EF, 0x00010000, 2153 0x0EF, 0x00010000,
2074 0x033, 0x0000000F, 2154 0x033, 0x0000000F,
@@ -2248,6 +2328,56 @@ static const u32 rtw8822c_rf_a[] = {
2248 0x03F, 0x00000180, 2328 0x03F, 0x00000180,
2249 0x033, 0x00000014, 2329 0x033, 0x00000014,
2250 0x03F, 0x00000040, 2330 0x03F, 0x00000040,
2331 0x93000003, 0x00000000, 0x40000000, 0x00000000,
2332 0x033, 0x0000001F,
2333 0x03F, 0x000773C0,
2334 0x033, 0x0000001E,
2335 0x03F, 0x000FF3C0,
2336 0x033, 0x0000001D,
2337 0x03F, 0x000773E8,
2338 0x033, 0x0000001C,
2339 0x03F, 0x000FF3E8,
2340 0x033, 0x0000001B,
2341 0x03F, 0x00000287,
2342 0x033, 0x0000001A,
2343 0x03F, 0x000002A8,
2344 0x033, 0x00000019,
2345 0x03F, 0x00000207,
2346 0x033, 0x00000018,
2347 0x03F, 0x000FF280,
2348 0x033, 0x00000017,
2349 0x03F, 0x00000200,
2350 0x033, 0x00000016,
2351 0x03F, 0x000001C0,
2352 0x033, 0x00000015,
2353 0x03F, 0x00000180,
2354 0x033, 0x00000014,
2355 0x03F, 0x00000040,
2356 0x93000004, 0x00000000, 0x40000000, 0x00000000,
2357 0x033, 0x0000001F,
2358 0x03F, 0x000773C0,
2359 0x033, 0x0000001E,
2360 0x03F, 0x000FF3C0,
2361 0x033, 0x0000001D,
2362 0x03F, 0x000773E8,
2363 0x033, 0x0000001C,
2364 0x03F, 0x000FF3E8,
2365 0x033, 0x0000001B,
2366 0x03F, 0x00000287,
2367 0x033, 0x0000001A,
2368 0x03F, 0x000002A8,
2369 0x033, 0x00000019,
2370 0x03F, 0x00000207,
2371 0x033, 0x00000018,
2372 0x03F, 0x000FF280,
2373 0x033, 0x00000017,
2374 0x03F, 0x00000200,
2375 0x033, 0x00000016,
2376 0x03F, 0x000001C0,
2377 0x033, 0x00000015,
2378 0x03F, 0x00000180,
2379 0x033, 0x00000014,
2380 0x03F, 0x00000040,
2251 0xA0000000, 0x00000000, 2381 0xA0000000, 0x00000000,
2252 0x033, 0x0000001F, 2382 0x033, 0x0000001F,
2253 0x03F, 0x000773E8, 2383 0x03F, 0x000773E8,
@@ -2426,6 +2556,56 @@ static const u32 rtw8822c_rf_a[] = {
2426 0x03F, 0x00000180, 2556 0x03F, 0x00000180,
2427 0x033, 0x00000024, 2557 0x033, 0x00000024,
2428 0x03F, 0x00000040, 2558 0x03F, 0x00000040,
2559 0x93000003, 0x00000000, 0x40000000, 0x00000000,
2560 0x033, 0x0000002F,
2561 0x03F, 0x000773C0,
2562 0x033, 0x0000002E,
2563 0x03F, 0x000FF3C0,
2564 0x033, 0x0000002D,
2565 0x03F, 0x000773E8,
2566 0x033, 0x0000002C,
2567 0x03F, 0x000FF3E8,
2568 0x033, 0x0000002B,
2569 0x03F, 0x00000287,
2570 0x033, 0x0000002A,
2571 0x03F, 0x000002A8,
2572 0x033, 0x00000029,
2573 0x03F, 0x00000207,
2574 0x033, 0x00000028,
2575 0x03F, 0x000FF280,
2576 0x033, 0x00000027,
2577 0x03F, 0x00000200,
2578 0x033, 0x00000026,
2579 0x03F, 0x000001C0,
2580 0x033, 0x00000025,
2581 0x03F, 0x00000180,
2582 0x033, 0x00000024,
2583 0x03F, 0x00000040,
2584 0x93000004, 0x00000000, 0x40000000, 0x00000000,
2585 0x033, 0x0000002F,
2586 0x03F, 0x000773C0,
2587 0x033, 0x0000002E,
2588 0x03F, 0x000FF3C0,
2589 0x033, 0x0000002D,
2590 0x03F, 0x000773E8,
2591 0x033, 0x0000002C,
2592 0x03F, 0x000FF3E8,
2593 0x033, 0x0000002B,
2594 0x03F, 0x00000287,
2595 0x033, 0x0000002A,
2596 0x03F, 0x000002A8,
2597 0x033, 0x00000029,
2598 0x03F, 0x00000207,
2599 0x033, 0x00000028,
2600 0x03F, 0x000FF280,
2601 0x033, 0x00000027,
2602 0x03F, 0x00000200,
2603 0x033, 0x00000026,
2604 0x03F, 0x000001C0,
2605 0x033, 0x00000025,
2606 0x03F, 0x00000180,
2607 0x033, 0x00000024,
2608 0x03F, 0x00000040,
2429 0xA0000000, 0x00000000, 2609 0xA0000000, 0x00000000,
2430 0x033, 0x0000002F, 2610 0x033, 0x0000002F,
2431 0x03F, 0x000773E8, 2611 0x03F, 0x000773E8,
@@ -2604,6 +2784,56 @@ static const u32 rtw8822c_rf_a[] = {
2604 0x03F, 0x00000180, 2784 0x03F, 0x00000180,
2605 0x033, 0x00000034, 2785 0x033, 0x00000034,
2606 0x03F, 0x00000040, 2786 0x03F, 0x00000040,
2787 0x93000003, 0x00000000, 0x40000000, 0x00000000,
2788 0x033, 0x0000003F,
2789 0x03F, 0x000773C0,
2790 0x033, 0x0000003E,
2791 0x03F, 0x000FF3C0,
2792 0x033, 0x0000003D,
2793 0x03F, 0x000773E8,
2794 0x033, 0x0000003C,
2795 0x03F, 0x000FF3E8,
2796 0x033, 0x0000003B,
2797 0x03F, 0x00000287,
2798 0x033, 0x0000003A,
2799 0x03F, 0x000002A8,
2800 0x033, 0x00000039,
2801 0x03F, 0x00000207,
2802 0x033, 0x00000038,
2803 0x03F, 0x000FF280,
2804 0x033, 0x00000037,
2805 0x03F, 0x00000200,
2806 0x033, 0x00000036,
2807 0x03F, 0x000001C0,
2808 0x033, 0x00000035,
2809 0x03F, 0x00000180,
2810 0x033, 0x00000034,
2811 0x03F, 0x00000040,
2812 0x93000004, 0x00000000, 0x40000000, 0x00000000,
2813 0x033, 0x0000003F,
2814 0x03F, 0x000773C0,
2815 0x033, 0x0000003E,
2816 0x03F, 0x000FF3C0,
2817 0x033, 0x0000003D,
2818 0x03F, 0x000773E8,
2819 0x033, 0x0000003C,
2820 0x03F, 0x000FF3E8,
2821 0x033, 0x0000003B,
2822 0x03F, 0x00000287,
2823 0x033, 0x0000003A,
2824 0x03F, 0x000002A8,
2825 0x033, 0x00000039,
2826 0x03F, 0x00000207,
2827 0x033, 0x00000038,
2828 0x03F, 0x000FF280,
2829 0x033, 0x00000037,
2830 0x03F, 0x00000200,
2831 0x033, 0x00000036,
2832 0x03F, 0x000001C0,
2833 0x033, 0x00000035,
2834 0x03F, 0x00000180,
2835 0x033, 0x00000034,
2836 0x03F, 0x00000040,
2607 0xA0000000, 0x00000000, 2837 0xA0000000, 0x00000000,
2608 0x033, 0x0000003F, 2838 0x033, 0x0000003F,
2609 0x03F, 0x000773E8, 2839 0x03F, 0x000773E8,
@@ -2782,6 +3012,56 @@ static const u32 rtw8822c_rf_a[] = {
2782 0x03F, 0x00000180, 3012 0x03F, 0x00000180,
2783 0x033, 0x00000044, 3013 0x033, 0x00000044,
2784 0x03F, 0x00000040, 3014 0x03F, 0x00000040,
3015 0x93000003, 0x00000000, 0x40000000, 0x00000000,
3016 0x033, 0x0000004F,
3017 0x03F, 0x000773C0,
3018 0x033, 0x0000004E,
3019 0x03F, 0x000FF3C0,
3020 0x033, 0x0000004D,
3021 0x03F, 0x000773E8,
3022 0x033, 0x0000004C,
3023 0x03F, 0x000FF3E8,
3024 0x033, 0x0000004B,
3025 0x03F, 0x00000287,
3026 0x033, 0x0000004A,
3027 0x03F, 0x000002A8,
3028 0x033, 0x00000049,
3029 0x03F, 0x00000207,
3030 0x033, 0x00000048,
3031 0x03F, 0x000FF280,
3032 0x033, 0x00000047,
3033 0x03F, 0x00000200,
3034 0x033, 0x00000046,
3035 0x03F, 0x000001C0,
3036 0x033, 0x00000045,
3037 0x03F, 0x00000180,
3038 0x033, 0x00000044,
3039 0x03F, 0x00000040,
3040 0x93000004, 0x00000000, 0x40000000, 0x00000000,
3041 0x033, 0x0000004F,
3042 0x03F, 0x000773C0,
3043 0x033, 0x0000004E,
3044 0x03F, 0x000FF3C0,
3045 0x033, 0x0000004D,
3046 0x03F, 0x000773E8,
3047 0x033, 0x0000004C,
3048 0x03F, 0x000FF3E8,
3049 0x033, 0x0000004B,
3050 0x03F, 0x00000287,
3051 0x033, 0x0000004A,
3052 0x03F, 0x000002A8,
3053 0x033, 0x00000049,
3054 0x03F, 0x00000207,
3055 0x033, 0x00000048,
3056 0x03F, 0x000FF280,
3057 0x033, 0x00000047,
3058 0x03F, 0x00000200,
3059 0x033, 0x00000046,
3060 0x03F, 0x000001C0,
3061 0x033, 0x00000045,
3062 0x03F, 0x00000180,
3063 0x033, 0x00000044,
3064 0x03F, 0x00000040,
2785 0xA0000000, 0x00000000, 3065 0xA0000000, 0x00000000,
2786 0x033, 0x0000004F, 3066 0x033, 0x0000004F,
2787 0x03F, 0x000773E8, 3067 0x03F, 0x000773E8,
@@ -2960,6 +3240,56 @@ static const u32 rtw8822c_rf_a[] = {
2960 0x03F, 0x00000180, 3240 0x03F, 0x00000180,
2961 0x033, 0x00000054, 3241 0x033, 0x00000054,
2962 0x03F, 0x00000040, 3242 0x03F, 0x00000040,
3243 0x93000003, 0x00000000, 0x40000000, 0x00000000,
3244 0x033, 0x0000005F,
3245 0x03F, 0x000773C0,
3246 0x033, 0x0000005E,
3247 0x03F, 0x000FF3C0,
3248 0x033, 0x0000005D,
3249 0x03F, 0x000773E8,
3250 0x033, 0x0000005C,
3251 0x03F, 0x000FF3E8,
3252 0x033, 0x0000005B,
3253 0x03F, 0x00000287,
3254 0x033, 0x0000005A,
3255 0x03F, 0x000002A8,
3256 0x033, 0x00000059,
3257 0x03F, 0x00000207,
3258 0x033, 0x00000058,
3259 0x03F, 0x000FF280,
3260 0x033, 0x00000057,
3261 0x03F, 0x00000200,
3262 0x033, 0x00000056,
3263 0x03F, 0x000001C0,
3264 0x033, 0x00000055,
3265 0x03F, 0x00000180,
3266 0x033, 0x00000054,
3267 0x03F, 0x00000040,
3268 0x93000004, 0x00000000, 0x40000000, 0x00000000,
3269 0x033, 0x0000005F,
3270 0x03F, 0x000773C0,
3271 0x033, 0x0000005E,
3272 0x03F, 0x000FF3C0,
3273 0x033, 0x0000005D,
3274 0x03F, 0x000773E8,
3275 0x033, 0x0000005C,
3276 0x03F, 0x000FF3E8,
3277 0x033, 0x0000005B,
3278 0x03F, 0x00000287,
3279 0x033, 0x0000005A,
3280 0x03F, 0x000002A8,
3281 0x033, 0x00000059,
3282 0x03F, 0x00000207,
3283 0x033, 0x00000058,
3284 0x03F, 0x000FF280,
3285 0x033, 0x00000057,
3286 0x03F, 0x00000200,
3287 0x033, 0x00000056,
3288 0x03F, 0x000001C0,
3289 0x033, 0x00000055,
3290 0x03F, 0x00000180,
3291 0x033, 0x00000054,
3292 0x03F, 0x00000040,
2963 0xA0000000, 0x00000000, 3293 0xA0000000, 0x00000000,
2964 0x033, 0x0000005F, 3294 0x033, 0x0000005F,
2965 0x03F, 0x000773E8, 3295 0x03F, 0x000773E8,
@@ -3000,6 +3330,10 @@ static const u32 rtw8822c_rf_a[] = {
3000 0x0EF, 0x00000000, 3330 0x0EF, 0x00000000,
3001 0x93000002, 0x00000000, 0x40000000, 0x00000000, 3331 0x93000002, 0x00000000, 0x40000000, 0x00000000,
3002 0x0EF, 0x00000000, 3332 0x0EF, 0x00000000,
3333 0x93000003, 0x00000000, 0x40000000, 0x00000000,
3334 0x0EF, 0x00000000,
3335 0x93000004, 0x00000000, 0x40000000, 0x00000000,
3336 0x0EF, 0x00000000,
3003 0xA0000000, 0x00000000, 3337 0xA0000000, 0x00000000,
3004 0x0EF, 0x00000000, 3338 0x0EF, 0x00000000,
3005 0xB0000000, 0x00000000, 3339 0xB0000000, 0x00000000,
@@ -3899,6 +4233,300 @@ static const u32 rtw8822c_rf_a[] = {
3899 0x03E, 0x00000000, 4233 0x03E, 0x00000000,
3900 0x03F, 0x0002C010, 4234 0x03F, 0x0002C010,
3901 0x0EF, 0x00000000, 4235 0x0EF, 0x00000000,
4236 0x93000003, 0x00000000, 0x40000000, 0x00000000,
4237 0x0EF, 0x00020000,
4238 0x033, 0x00000000,
4239 0x03E, 0x00001C86,
4240 0x03F, 0x00020000,
4241 0x033, 0x00000001,
4242 0x03E, 0x00001C02,
4243 0x03F, 0x00020000,
4244 0x033, 0x00000002,
4245 0x03E, 0x00000F02,
4246 0x03F, 0x00020000,
4247 0x033, 0x00000003,
4248 0x03E, 0x00000F00,
4249 0x03F, 0x00020000,
4250 0x033, 0x00000004,
4251 0x03E, 0x00000086,
4252 0x03F, 0x00020000,
4253 0x033, 0x00000005,
4254 0x03E, 0x00000002,
4255 0x03F, 0x00020000,
4256 0x033, 0x00000006,
4257 0x03E, 0x00000000,
4258 0x03F, 0x00020000,
4259 0x033, 0x00000007,
4260 0x03E, 0x00000000,
4261 0x03F, 0x0002F81C,
4262 0x033, 0x00000008,
4263 0x03E, 0x00001C86,
4264 0x03F, 0x00020000,
4265 0x033, 0x00000009,
4266 0x03E, 0x00001C02,
4267 0x03F, 0x00020000,
4268 0x033, 0x0000000A,
4269 0x03E, 0x00000F02,
4270 0x03F, 0x00020000,
4271 0x033, 0x0000000B,
4272 0x03E, 0x00000F00,
4273 0x03F, 0x00020000,
4274 0x033, 0x0000000C,
4275 0x03E, 0x00000086,
4276 0x03F, 0x00020000,
4277 0x033, 0x0000000D,
4278 0x03E, 0x00000002,
4279 0x03F, 0x00020000,
4280 0x033, 0x0000000E,
4281 0x03E, 0x00000000,
4282 0x03F, 0x00020000,
4283 0x033, 0x0000000F,
4284 0x03E, 0x00000000,
4285 0x03F, 0x0002F81C,
4286 0x033, 0x00000010,
4287 0x03E, 0x00001C86,
4288 0x03F, 0x00020000,
4289 0x033, 0x00000011,
4290 0x03E, 0x00001C02,
4291 0x03F, 0x00020000,
4292 0x033, 0x00000012,
4293 0x03E, 0x00000F02,
4294 0x03F, 0x00020000,
4295 0x033, 0x00000013,
4296 0x03E, 0x00000F00,
4297 0x03F, 0x00020000,
4298 0x033, 0x00000014,
4299 0x03E, 0x00000086,
4300 0x03F, 0x00020000,
4301 0x033, 0x00000015,
4302 0x03E, 0x00000002,
4303 0x03F, 0x00020000,
4304 0x033, 0x00000016,
4305 0x03E, 0x00000000,
4306 0x03F, 0x00020000,
4307 0x033, 0x00000017,
4308 0x03E, 0x00000000,
4309 0x03F, 0x0002C010,
4310 0x033, 0x00000018,
4311 0x03E, 0x00001C86,
4312 0x03F, 0x00020000,
4313 0x033, 0x00000019,
4314 0x03E, 0x00001C02,
4315 0x03F, 0x00020000,
4316 0x033, 0x0000001A,
4317 0x03E, 0x00000F02,
4318 0x03F, 0x00020000,
4319 0x033, 0x0000001B,
4320 0x03E, 0x00000F00,
4321 0x03F, 0x00020000,
4322 0x033, 0x0000001C,
4323 0x03E, 0x00000086,
4324 0x03F, 0x00020000,
4325 0x033, 0x0000001D,
4326 0x03E, 0x00000002,
4327 0x03F, 0x00020000,
4328 0x033, 0x0000001E,
4329 0x03E, 0x00000000,
4330 0x03F, 0x00020000,
4331 0x033, 0x0000001F,
4332 0x03E, 0x00000000,
4333 0x03F, 0x0002C010,
4334 0x033, 0x00000020,
4335 0x03E, 0x00001C86,
4336 0x03F, 0x00020000,
4337 0x033, 0x00000021,
4338 0x03E, 0x00001C02,
4339 0x03F, 0x00020000,
4340 0x033, 0x00000022,
4341 0x03E, 0x00000F02,
4342 0x03F, 0x00020000,
4343 0x033, 0x00000023,
4344 0x03E, 0x00000F00,
4345 0x03F, 0x00020000,
4346 0x033, 0x00000024,
4347 0x03E, 0x00000086,
4348 0x03F, 0x00020000,
4349 0x033, 0x00000025,
4350 0x03E, 0x00000002,
4351 0x03F, 0x00020000,
4352 0x033, 0x00000026,
4353 0x03E, 0x00000000,
4354 0x03F, 0x00020000,
4355 0x033, 0x00000027,
4356 0x03E, 0x00000000,
4357 0x03F, 0x0002C010,
4358 0x033, 0x00000028,
4359 0x03E, 0x00001C86,
4360 0x03F, 0x00020000,
4361 0x033, 0x00000029,
4362 0x03E, 0x00001C02,
4363 0x03F, 0x00020000,
4364 0x033, 0x0000002A,
4365 0x03E, 0x00000F02,
4366 0x03F, 0x00020000,
4367 0x033, 0x0000002B,
4368 0x03E, 0x00000F00,
4369 0x03F, 0x00020000,
4370 0x033, 0x0000002C,
4371 0x03E, 0x00000086,
4372 0x03F, 0x00020000,
4373 0x033, 0x0000002D,
4374 0x03E, 0x00000002,
4375 0x03F, 0x00020000,
4376 0x033, 0x0000002E,
4377 0x03E, 0x00000000,
4378 0x03F, 0x00020000,
4379 0x033, 0x0000002F,
4380 0x03E, 0x00000000,
4381 0x03F, 0x0002C010,
4382 0x0EF, 0x00000000,
4383 0x93000004, 0x00000000, 0x40000000, 0x00000000,
4384 0x0EF, 0x00020000,
4385 0x033, 0x00000000,
4386 0x03E, 0x00001C86,
4387 0x03F, 0x00020000,
4388 0x033, 0x00000001,
4389 0x03E, 0x00001C02,
4390 0x03F, 0x00020000,
4391 0x033, 0x00000002,
4392 0x03E, 0x00000F02,
4393 0x03F, 0x00020000,
4394 0x033, 0x00000003,
4395 0x03E, 0x00000F00,
4396 0x03F, 0x00020000,
4397 0x033, 0x00000004,
4398 0x03E, 0x00000086,
4399 0x03F, 0x00020000,
4400 0x033, 0x00000005,
4401 0x03E, 0x00000002,
4402 0x03F, 0x00020000,
4403 0x033, 0x00000006,
4404 0x03E, 0x00000000,
4405 0x03F, 0x00020000,
4406 0x033, 0x00000007,
4407 0x03E, 0x00000000,
4408 0x03F, 0x0002F81C,
4409 0x033, 0x00000008,
4410 0x03E, 0x00001C86,
4411 0x03F, 0x00020000,
4412 0x033, 0x00000009,
4413 0x03E, 0x00001C02,
4414 0x03F, 0x00020000,
4415 0x033, 0x0000000A,
4416 0x03E, 0x00000F02,
4417 0x03F, 0x00020000,
4418 0x033, 0x0000000B,
4419 0x03E, 0x00000F00,
4420 0x03F, 0x00020000,
4421 0x033, 0x0000000C,
4422 0x03E, 0x00000086,
4423 0x03F, 0x00020000,
4424 0x033, 0x0000000D,
4425 0x03E, 0x00000002,
4426 0x03F, 0x00020000,
4427 0x033, 0x0000000E,
4428 0x03E, 0x00000000,
4429 0x03F, 0x00020000,
4430 0x033, 0x0000000F,
4431 0x03E, 0x00000000,
4432 0x03F, 0x0002F81C,
4433 0x033, 0x00000010,
4434 0x03E, 0x00001C86,
4435 0x03F, 0x00020000,
4436 0x033, 0x00000011,
4437 0x03E, 0x00001C02,
4438 0x03F, 0x00020000,
4439 0x033, 0x00000012,
4440 0x03E, 0x00000F02,
4441 0x03F, 0x00020000,
4442 0x033, 0x00000013,
4443 0x03E, 0x00000F00,
4444 0x03F, 0x00020000,
4445 0x033, 0x00000014,
4446 0x03E, 0x00000086,
4447 0x03F, 0x00020000,
4448 0x033, 0x00000015,
4449 0x03E, 0x00000002,
4450 0x03F, 0x00020000,
4451 0x033, 0x00000016,
4452 0x03E, 0x00000000,
4453 0x03F, 0x00020000,
4454 0x033, 0x00000017,
4455 0x03E, 0x00000000,
4456 0x03F, 0x0002C010,
4457 0x033, 0x00000018,
4458 0x03E, 0x00001C86,
4459 0x03F, 0x00020000,
4460 0x033, 0x00000019,
4461 0x03E, 0x00001C02,
4462 0x03F, 0x00020000,
4463 0x033, 0x0000001A,
4464 0x03E, 0x00000F02,
4465 0x03F, 0x00020000,
4466 0x033, 0x0000001B,
4467 0x03E, 0x00000F00,
4468 0x03F, 0x00020000,
4469 0x033, 0x0000001C,
4470 0x03E, 0x00000086,
4471 0x03F, 0x00020000,
4472 0x033, 0x0000001D,
4473 0x03E, 0x00000002,
4474 0x03F, 0x00020000,
4475 0x033, 0x0000001E,
4476 0x03E, 0x00000000,
4477 0x03F, 0x00020000,
4478 0x033, 0x0000001F,
4479 0x03E, 0x00000000,
4480 0x03F, 0x0002C010,
4481 0x033, 0x00000020,
4482 0x03E, 0x00001C86,
4483 0x03F, 0x00020000,
4484 0x033, 0x00000021,
4485 0x03E, 0x00001C02,
4486 0x03F, 0x00020000,
4487 0x033, 0x00000022,
4488 0x03E, 0x00000F02,
4489 0x03F, 0x00020000,
4490 0x033, 0x00000023,
4491 0x03E, 0x00000F00,
4492 0x03F, 0x00020000,
4493 0x033, 0x00000024,
4494 0x03E, 0x00000086,
4495 0x03F, 0x00020000,
4496 0x033, 0x00000025,
4497 0x03E, 0x00000002,
4498 0x03F, 0x00020000,
4499 0x033, 0x00000026,
4500 0x03E, 0x00000000,
4501 0x03F, 0x00020000,
4502 0x033, 0x00000027,
4503 0x03E, 0x00000000,
4504 0x03F, 0x0002C010,
4505 0x033, 0x00000028,
4506 0x03E, 0x00001C86,
4507 0x03F, 0x00020000,
4508 0x033, 0x00000029,
4509 0x03E, 0x00001C02,
4510 0x03F, 0x00020000,
4511 0x033, 0x0000002A,
4512 0x03E, 0x00000F02,
4513 0x03F, 0x00020000,
4514 0x033, 0x0000002B,
4515 0x03E, 0x00000F00,
4516 0x03F, 0x00020000,
4517 0x033, 0x0000002C,
4518 0x03E, 0x00000086,
4519 0x03F, 0x00020000,
4520 0x033, 0x0000002D,
4521 0x03E, 0x00000002,
4522 0x03F, 0x00020000,
4523 0x033, 0x0000002E,
4524 0x03E, 0x00000000,
4525 0x03F, 0x00020000,
4526 0x033, 0x0000002F,
4527 0x03E, 0x00000000,
4528 0x03F, 0x0002C010,
4529 0x0EF, 0x00000000,
3902 0xA0000000, 0x00000000, 4530 0xA0000000, 0x00000000,
3903 0x0EF, 0x00020000, 4531 0x0EF, 0x00020000,
3904 0x033, 0x00000000, 4532 0x033, 0x00000000,
@@ -4063,6 +4691,10 @@ static const u32 rtw8822c_rf_a[] = {
4063 0x063, 0x00000002, 4691 0x063, 0x00000002,
4064 0x93000002, 0x00000000, 0x40000000, 0x00000000, 4692 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4065 0x063, 0x00000002, 4693 0x063, 0x00000002,
4694 0x93000003, 0x00000000, 0x40000000, 0x00000000,
4695 0x063, 0x00000002,
4696 0x93000004, 0x00000000, 0x40000000, 0x00000000,
4697 0x063, 0x00000002,
4066 0xA0000000, 0x00000000, 4698 0xA0000000, 0x00000000,
4067 0x063, 0x00000C02, 4699 0x063, 0x00000C02,
4068 0xB0000000, 0x00000000, 4700 0xB0000000, 0x00000000,
@@ -4176,59 +4808,113 @@ static const u32 rtw8822c_rf_a[] = {
4176 0x030, 0x00018207, 4808 0x030, 0x00018207,
4177 0x030, 0x00019237, 4809 0x030, 0x00019237,
4178 0x93000001, 0x00000000, 0x40000000, 0x00000000, 4810 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4179 0x030, 0x00000237, 4811 0x030, 0x00000238,
4180 0x030, 0x00001237, 4812 0x030, 0x00001238,
4181 0x030, 0x00002237, 4813 0x030, 0x00002238,
4182 0x030, 0x00003237, 4814 0x030, 0x00003238,
4183 0x030, 0x00004207, 4815 0x030, 0x00004228,
4184 0x030, 0x00005237, 4816 0x030, 0x00005238,
4185 0x030, 0x00006237, 4817 0x030, 0x00006238,
4186 0x030, 0x00007237, 4818 0x030, 0x00007238,
4187 0x030, 0x00008207, 4819 0x030, 0x00008228,
4188 0x030, 0x00009237, 4820 0x030, 0x00009238,
4189 0x030, 0x0000A237, 4821 0x030, 0x0000A238,
4190 0x030, 0x0000B237, 4822 0x030, 0x0000B238,
4191 0x030, 0x0000C237, 4823 0x030, 0x0000C238,
4192 0x030, 0x0000D237, 4824 0x030, 0x0000D238,
4193 0x030, 0x0000E207, 4825 0x030, 0x0000E228,
4194 0x030, 0x0000F237, 4826 0x030, 0x0000F238,
4195 0x030, 0x00010237, 4827 0x030, 0x00010238,
4196 0x030, 0x00011237, 4828 0x030, 0x00011238,
4197 0x030, 0x00012207, 4829 0x030, 0x00012228,
4198 0x030, 0x00013237, 4830 0x030, 0x00013238,
4199 0x030, 0x00014237, 4831 0x030, 0x00014238,
4200 0x030, 0x00015237, 4832 0x030, 0x00015238,
4201 0x030, 0x00016207, 4833 0x030, 0x00016228,
4202 0x030, 0x00017237, 4834 0x030, 0x00017238,
4203 0x030, 0x00018207, 4835 0x030, 0x00018228,
4204 0x030, 0x00019237, 4836 0x030, 0x00019238,
4205 0x93000002, 0x00000000, 0x40000000, 0x00000000, 4837 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4206 0x030, 0x00000237, 4838 0x030, 0x00000238,
4207 0x030, 0x00001237, 4839 0x030, 0x00001238,
4208 0x030, 0x00002237, 4840 0x030, 0x00002238,
4209 0x030, 0x00003237, 4841 0x030, 0x00003238,
4210 0x030, 0x00004207, 4842 0x030, 0x00004228,
4211 0x030, 0x00005237, 4843 0x030, 0x00005238,
4212 0x030, 0x00006237, 4844 0x030, 0x00006238,
4213 0x030, 0x00007237, 4845 0x030, 0x00007238,
4214 0x030, 0x00008207, 4846 0x030, 0x00008228,
4215 0x030, 0x00009237, 4847 0x030, 0x00009238,
4216 0x030, 0x0000A237, 4848 0x030, 0x0000A238,
4217 0x030, 0x0000B237, 4849 0x030, 0x0000B238,
4218 0x030, 0x0000C237, 4850 0x030, 0x0000C238,
4219 0x030, 0x0000D237, 4851 0x030, 0x0000D238,
4220 0x030, 0x0000E207, 4852 0x030, 0x0000E228,
4221 0x030, 0x0000F237, 4853 0x030, 0x0000F238,
4222 0x030, 0x00010237, 4854 0x030, 0x00010238,
4223 0x030, 0x00011237, 4855 0x030, 0x00011238,
4224 0x030, 0x00012207, 4856 0x030, 0x00012228,
4225 0x030, 0x00013237, 4857 0x030, 0x00013238,
4226 0x030, 0x00014237, 4858 0x030, 0x00014238,
4227 0x030, 0x00015237, 4859 0x030, 0x00015238,
4228 0x030, 0x00016207, 4860 0x030, 0x00016228,
4229 0x030, 0x00017237, 4861 0x030, 0x00017238,
4230 0x030, 0x00018207, 4862 0x030, 0x00018228,
4231 0x030, 0x00019237, 4863 0x030, 0x00019238,
4864 0x93000003, 0x00000000, 0x40000000, 0x00000000,
4865 0x030, 0x00000239,
4866 0x030, 0x00001239,
4867 0x030, 0x00002239,
4868 0x030, 0x00003239,
4869 0x030, 0x00004239,
4870 0x030, 0x00005239,
4871 0x030, 0x00006239,
4872 0x030, 0x00007239,
4873 0x030, 0x00008239,
4874 0x030, 0x00009239,
4875 0x030, 0x0000A239,
4876 0x030, 0x0000B239,
4877 0x030, 0x0000C239,
4878 0x030, 0x0000D239,
4879 0x030, 0x0000E209,
4880 0x030, 0x0000F239,
4881 0x030, 0x00010239,
4882 0x030, 0x00011239,
4883 0x030, 0x00012209,
4884 0x030, 0x00013239,
4885 0x030, 0x00014239,
4886 0x030, 0x00015239,
4887 0x030, 0x00016209,
4888 0x030, 0x00017239,
4889 0x030, 0x00018209,
4890 0x030, 0x00019239,
4891 0x93000004, 0x00000000, 0x40000000, 0x00000000,
4892 0x030, 0x00000239,
4893 0x030, 0x00001239,
4894 0x030, 0x00002239,
4895 0x030, 0x00003239,
4896 0x030, 0x00004239,
4897 0x030, 0x00005239,
4898 0x030, 0x00006239,
4899 0x030, 0x00007239,
4900 0x030, 0x00008239,
4901 0x030, 0x00009239,
4902 0x030, 0x0000A239,
4903 0x030, 0x0000B239,
4904 0x030, 0x0000C239,
4905 0x030, 0x0000D239,
4906 0x030, 0x0000E209,
4907 0x030, 0x0000F239,
4908 0x030, 0x00010239,
4909 0x030, 0x00011239,
4910 0x030, 0x00012209,
4911 0x030, 0x00013239,
4912 0x030, 0x00014239,
4913 0x030, 0x00015239,
4914 0x030, 0x00016209,
4915 0x030, 0x00017239,
4916 0x030, 0x00018209,
4917 0x030, 0x00019239,
4232 0xA0000000, 0x00000000, 4918 0xA0000000, 0x00000000,
4233 0x030, 0x00000233, 4919 0x030, 0x00000233,
4234 0x030, 0x00001233, 4920 0x030, 0x00001233,
@@ -4337,6 +5023,32 @@ static const u32 rtw8822c_rf_a[] = {
4337 0x030, 0x00009334, 5023 0x030, 0x00009334,
4338 0x030, 0x0000A334, 5024 0x030, 0x0000A334,
4339 0x030, 0x0000B334, 5025 0x030, 0x0000B334,
5026 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5027 0x030, 0x00000334,
5028 0x030, 0x00001334,
5029 0x030, 0x00002334,
5030 0x030, 0x00003334,
5031 0x030, 0x00004334,
5032 0x030, 0x00005334,
5033 0x030, 0x00006334,
5034 0x030, 0x00007334,
5035 0x030, 0x00008334,
5036 0x030, 0x00009334,
5037 0x030, 0x0000A334,
5038 0x030, 0x0000B334,
5039 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5040 0x030, 0x00000334,
5041 0x030, 0x00001334,
5042 0x030, 0x00002334,
5043 0x030, 0x00003334,
5044 0x030, 0x00004334,
5045 0x030, 0x00005334,
5046 0x030, 0x00006334,
5047 0x030, 0x00007334,
5048 0x030, 0x00008334,
5049 0x030, 0x00009334,
5050 0x030, 0x0000A334,
5051 0x030, 0x0000B334,
4340 0xA0000000, 0x00000000, 5052 0xA0000000, 0x00000000,
4341 0x030, 0x00000232, 5053 0x030, 0x00000232,
4342 0x030, 0x00001232, 5054 0x030, 0x00001232,
@@ -4444,6 +5156,10 @@ static const u32 rtw8822c_rf_a[] = {
4444 0x052, 0x000902CA, 5156 0x052, 0x000902CA,
4445 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5157 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4446 0x052, 0x000902CA, 5158 0x052, 0x000902CA,
5159 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5160 0x052, 0x000902CA,
5161 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5162 0x052, 0x000902CA,
4447 0xA0000000, 0x00000000, 5163 0xA0000000, 0x00000000,
4448 0x052, 0x000942CA, 5164 0x052, 0x000942CA,
4449 0xB0000000, 0x00000000, 5165 0xB0000000, 0x00000000,
@@ -4462,9 +5178,13 @@ static const u32 rtw8822c_rf_a[] = {
4462 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5178 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4463 0x03F, 0x00010E46, 5179 0x03F, 0x00010E46,
4464 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5180 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4465 0x03F, 0x00024246, 5181 0x03F, 0x00028246,
4466 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5182 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4467 0x03F, 0x00024246, 5183 0x03F, 0x00028246,
5184 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5185 0x03F, 0x00028246,
5186 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5187 0x03F, 0x00028246,
4468 0xA0000000, 0x00000000, 5188 0xA0000000, 0x00000000,
4469 0x03F, 0x00002A46, 5189 0x03F, 0x00002A46,
4470 0xB0000000, 0x00000000, 5190 0xB0000000, 0x00000000,
@@ -4479,9 +5199,13 @@ static const u32 rtw8822c_rf_a[] = {
4479 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5199 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4480 0x03F, 0x00010E46, 5200 0x03F, 0x00010E46,
4481 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5201 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4482 0x03F, 0x00024246, 5202 0x03F, 0x00028246,
4483 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5203 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4484 0x03F, 0x00024246, 5204 0x03F, 0x00028246,
5205 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5206 0x03F, 0x00028246,
5207 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5208 0x03F, 0x00028246,
4485 0xA0000000, 0x00000000, 5209 0xA0000000, 0x00000000,
4486 0x03F, 0x00002A46, 5210 0x03F, 0x00002A46,
4487 0xB0000000, 0x00000000, 5211 0xB0000000, 0x00000000,
@@ -4499,6 +5223,10 @@ static const u32 rtw8822c_rf_a[] = {
4499 0x03F, 0x00030246, 5223 0x03F, 0x00030246,
4500 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5224 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4501 0x03F, 0x00030246, 5225 0x03F, 0x00030246,
5226 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5227 0x03F, 0x00030246,
5228 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5229 0x03F, 0x00030246,
4502 0xA0000000, 0x00000000, 5230 0xA0000000, 0x00000000,
4503 0x03F, 0x00002A46, 5231 0x03F, 0x00002A46,
4504 0xB0000000, 0x00000000, 5232 0xB0000000, 0x00000000,
@@ -4513,9 +5241,13 @@ static const u32 rtw8822c_rf_a[] = {
4513 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5241 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4514 0x03F, 0x00010E46, 5242 0x03F, 0x00010E46,
4515 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5243 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4516 0x03F, 0x00024246, 5244 0x03F, 0x00028246,
4517 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5245 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4518 0x03F, 0x00024246, 5246 0x03F, 0x00028246,
5247 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5248 0x03F, 0x00028246,
5249 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5250 0x03F, 0x00028246,
4519 0xA0000000, 0x00000000, 5251 0xA0000000, 0x00000000,
4520 0x03F, 0x00002A46, 5252 0x03F, 0x00002A46,
4521 0xB0000000, 0x00000000, 5253 0xB0000000, 0x00000000,
@@ -4530,9 +5262,13 @@ static const u32 rtw8822c_rf_a[] = {
4530 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5262 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4531 0x03F, 0x00010E46, 5263 0x03F, 0x00010E46,
4532 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5264 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4533 0x03F, 0x00024246, 5265 0x03F, 0x00028246,
4534 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5266 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4535 0x03F, 0x00024246, 5267 0x03F, 0x00028246,
5268 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5269 0x03F, 0x00028246,
5270 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5271 0x03F, 0x00028246,
4536 0xA0000000, 0x00000000, 5272 0xA0000000, 0x00000000,
4537 0x03F, 0x00002A46, 5273 0x03F, 0x00002A46,
4538 0xB0000000, 0x00000000, 5274 0xB0000000, 0x00000000,
@@ -4550,6 +5286,10 @@ static const u32 rtw8822c_rf_a[] = {
4550 0x03F, 0x00030246, 5286 0x03F, 0x00030246,
4551 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5287 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4552 0x03F, 0x00030246, 5288 0x03F, 0x00030246,
5289 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5290 0x03F, 0x00030246,
5291 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5292 0x03F, 0x00030246,
4553 0xA0000000, 0x00000000, 5293 0xA0000000, 0x00000000,
4554 0x03F, 0x00002A46, 5294 0x03F, 0x00002A46,
4555 0xB0000000, 0x00000000, 5295 0xB0000000, 0x00000000,
@@ -4564,9 +5304,13 @@ static const u32 rtw8822c_rf_a[] = {
4564 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5304 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4565 0x03F, 0x00010E46, 5305 0x03F, 0x00010E46,
4566 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5306 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4567 0x03F, 0x00024246, 5307 0x03F, 0x00028246,
4568 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5308 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4569 0x03F, 0x00024246, 5309 0x03F, 0x00028246,
5310 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5311 0x03F, 0x00028246,
5312 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5313 0x03F, 0x00028246,
4570 0xA0000000, 0x00000000, 5314 0xA0000000, 0x00000000,
4571 0x03F, 0x00002A46, 5315 0x03F, 0x00002A46,
4572 0xB0000000, 0x00000000, 5316 0xB0000000, 0x00000000,
@@ -4581,9 +5325,13 @@ static const u32 rtw8822c_rf_a[] = {
4581 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5325 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4582 0x03F, 0x00010E46, 5326 0x03F, 0x00010E46,
4583 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5327 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4584 0x03F, 0x00024246, 5328 0x03F, 0x00028246,
4585 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5329 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4586 0x03F, 0x00024246, 5330 0x03F, 0x00028246,
5331 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5332 0x03F, 0x00028246,
5333 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5334 0x03F, 0x00028246,
4587 0xA0000000, 0x00000000, 5335 0xA0000000, 0x00000000,
4588 0x03F, 0x00002A46, 5336 0x03F, 0x00002A46,
4589 0xB0000000, 0x00000000, 5337 0xB0000000, 0x00000000,
@@ -4601,6 +5349,10 @@ static const u32 rtw8822c_rf_a[] = {
4601 0x03F, 0x00030246, 5349 0x03F, 0x00030246,
4602 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5350 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4603 0x03F, 0x00030246, 5351 0x03F, 0x00030246,
5352 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5353 0x03F, 0x00030246,
5354 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5355 0x03F, 0x00030246,
4604 0xA0000000, 0x00000000, 5356 0xA0000000, 0x00000000,
4605 0x03F, 0x00002A46, 5357 0x03F, 0x00002A46,
4606 0xB0000000, 0x00000000, 5358 0xB0000000, 0x00000000,
@@ -4615,9 +5367,13 @@ static const u32 rtw8822c_rf_a[] = {
4615 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5367 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4616 0x03F, 0x00010E46, 5368 0x03F, 0x00010E46,
4617 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5369 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4618 0x03F, 0x00024246, 5370 0x03F, 0x00028246,
4619 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5371 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4620 0x03F, 0x00024246, 5372 0x03F, 0x00028246,
5373 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5374 0x03F, 0x00028246,
5375 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5376 0x03F, 0x00028246,
4621 0xA0000000, 0x00000000, 5377 0xA0000000, 0x00000000,
4622 0x03F, 0x00002A46, 5378 0x03F, 0x00002A46,
4623 0xB0000000, 0x00000000, 5379 0xB0000000, 0x00000000,
@@ -4632,9 +5388,13 @@ static const u32 rtw8822c_rf_a[] = {
4632 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5388 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4633 0x03F, 0x00010E46, 5389 0x03F, 0x00010E46,
4634 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5390 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4635 0x03F, 0x00024246, 5391 0x03F, 0x00028246,
4636 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5392 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4637 0x03F, 0x00024246, 5393 0x03F, 0x00028246,
5394 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5395 0x03F, 0x00028246,
5396 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5397 0x03F, 0x00028246,
4638 0xA0000000, 0x00000000, 5398 0xA0000000, 0x00000000,
4639 0x03F, 0x00002A46, 5399 0x03F, 0x00002A46,
4640 0xB0000000, 0x00000000, 5400 0xB0000000, 0x00000000,
@@ -4652,6 +5412,10 @@ static const u32 rtw8822c_rf_a[] = {
4652 0x03F, 0x00030246, 5412 0x03F, 0x00030246,
4653 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5413 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4654 0x03F, 0x00030246, 5414 0x03F, 0x00030246,
5415 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5416 0x03F, 0x00030246,
5417 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5418 0x03F, 0x00030246,
4655 0xA0000000, 0x00000000, 5419 0xA0000000, 0x00000000,
4656 0x03F, 0x00002A46, 5420 0x03F, 0x00002A46,
4657 0xB0000000, 0x00000000, 5421 0xB0000000, 0x00000000,
@@ -4666,9 +5430,13 @@ static const u32 rtw8822c_rf_a[] = {
4666 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5430 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4667 0x03F, 0x00010E46, 5431 0x03F, 0x00010E46,
4668 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5432 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4669 0x03F, 0x00024246, 5433 0x03F, 0x00028246,
4670 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5434 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4671 0x03F, 0x00024246, 5435 0x03F, 0x00028246,
5436 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5437 0x03F, 0x00028246,
5438 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5439 0x03F, 0x00028246,
4672 0xA0000000, 0x00000000, 5440 0xA0000000, 0x00000000,
4673 0x03F, 0x00002A46, 5441 0x03F, 0x00002A46,
4674 0xB0000000, 0x00000000, 5442 0xB0000000, 0x00000000,
@@ -4683,9 +5451,13 @@ static const u32 rtw8822c_rf_a[] = {
4683 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5451 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4684 0x03F, 0x00010E46, 5452 0x03F, 0x00010E46,
4685 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5453 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4686 0x03F, 0x00024246, 5454 0x03F, 0x00028246,
4687 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5455 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4688 0x03F, 0x00024246, 5456 0x03F, 0x00028246,
5457 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5458 0x03F, 0x00028246,
5459 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5460 0x03F, 0x00028246,
4689 0xA0000000, 0x00000000, 5461 0xA0000000, 0x00000000,
4690 0x03F, 0x00002A46, 5462 0x03F, 0x00002A46,
4691 0xB0000000, 0x00000000, 5463 0xB0000000, 0x00000000,
@@ -4703,6 +5475,10 @@ static const u32 rtw8822c_rf_a[] = {
4703 0x03F, 0x00030246, 5475 0x03F, 0x00030246,
4704 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5476 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4705 0x03F, 0x00030246, 5477 0x03F, 0x00030246,
5478 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5479 0x03F, 0x00030246,
5480 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5481 0x03F, 0x00030246,
4706 0xA0000000, 0x00000000, 5482 0xA0000000, 0x00000000,
4707 0x03F, 0x00002A46, 5483 0x03F, 0x00002A46,
4708 0xB0000000, 0x00000000, 5484 0xB0000000, 0x00000000,
@@ -4717,9 +5493,13 @@ static const u32 rtw8822c_rf_a[] = {
4717 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5493 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4718 0x03F, 0x0000EA46, 5494 0x03F, 0x0000EA46,
4719 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5495 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4720 0x03F, 0x00024246, 5496 0x03F, 0x00028246,
4721 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5497 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4722 0x03F, 0x00024246, 5498 0x03F, 0x00028246,
5499 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5500 0x03F, 0x00028246,
5501 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5502 0x03F, 0x00028246,
4723 0xA0000000, 0x00000000, 5503 0xA0000000, 0x00000000,
4724 0x03F, 0x00002A46, 5504 0x03F, 0x00002A46,
4725 0xB0000000, 0x00000000, 5505 0xB0000000, 0x00000000,
@@ -4734,9 +5514,13 @@ static const u32 rtw8822c_rf_a[] = {
4734 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5514 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4735 0x03F, 0x0000EA46, 5515 0x03F, 0x0000EA46,
4736 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5516 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4737 0x03F, 0x00024246, 5517 0x03F, 0x00028246,
4738 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5518 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4739 0x03F, 0x00024246, 5519 0x03F, 0x00028246,
5520 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5521 0x03F, 0x00028246,
5522 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5523 0x03F, 0x00028246,
4740 0xA0000000, 0x00000000, 5524 0xA0000000, 0x00000000,
4741 0x03F, 0x00002A46, 5525 0x03F, 0x00002A46,
4742 0xB0000000, 0x00000000, 5526 0xB0000000, 0x00000000,
@@ -4754,6 +5538,10 @@ static const u32 rtw8822c_rf_a[] = {
4754 0x03F, 0x00030246, 5538 0x03F, 0x00030246,
4755 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5539 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4756 0x03F, 0x00030246, 5540 0x03F, 0x00030246,
5541 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5542 0x03F, 0x00030246,
5543 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5544 0x03F, 0x00030246,
4757 0xA0000000, 0x00000000, 5545 0xA0000000, 0x00000000,
4758 0x03F, 0x00002A46, 5546 0x03F, 0x00002A46,
4759 0xB0000000, 0x00000000, 5547 0xB0000000, 0x00000000,
@@ -4768,9 +5556,13 @@ static const u32 rtw8822c_rf_a[] = {
4768 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5556 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4769 0x03F, 0x0000EA46, 5557 0x03F, 0x0000EA46,
4770 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5558 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4771 0x03F, 0x00021E46, 5559 0x03F, 0x00025E46,
4772 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5560 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4773 0x03F, 0x00021E46, 5561 0x03F, 0x00025E46,
5562 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5563 0x03F, 0x00025E46,
5564 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5565 0x03F, 0x00025E46,
4774 0xA0000000, 0x00000000, 5566 0xA0000000, 0x00000000,
4775 0x03F, 0x00002A46, 5567 0x03F, 0x00002A46,
4776 0xB0000000, 0x00000000, 5568 0xB0000000, 0x00000000,
@@ -4785,9 +5577,13 @@ static const u32 rtw8822c_rf_a[] = {
4785 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5577 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4786 0x03F, 0x0000EA46, 5578 0x03F, 0x0000EA46,
4787 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5579 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4788 0x03F, 0x00021E46, 5580 0x03F, 0x00025E46,
4789 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5581 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4790 0x03F, 0x00021E46, 5582 0x03F, 0x00025E46,
5583 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5584 0x03F, 0x00025E46,
5585 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5586 0x03F, 0x00025E46,
4791 0xA0000000, 0x00000000, 5587 0xA0000000, 0x00000000,
4792 0x03F, 0x00002A46, 5588 0x03F, 0x00002A46,
4793 0xB0000000, 0x00000000, 5589 0xB0000000, 0x00000000,
@@ -4805,6 +5601,10 @@ static const u32 rtw8822c_rf_a[] = {
4805 0x03F, 0x00031E46, 5601 0x03F, 0x00031E46,
4806 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5602 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4807 0x03F, 0x00031E46, 5603 0x03F, 0x00031E46,
5604 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5605 0x03F, 0x00031E46,
5606 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5607 0x03F, 0x00031E46,
4808 0xA0000000, 0x00000000, 5608 0xA0000000, 0x00000000,
4809 0x03F, 0x00002A46, 5609 0x03F, 0x00002A46,
4810 0xB0000000, 0x00000000, 5610 0xB0000000, 0x00000000,
@@ -4819,9 +5619,13 @@ static const u32 rtw8822c_rf_a[] = {
4819 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5619 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4820 0x03F, 0x0000EA46, 5620 0x03F, 0x0000EA46,
4821 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5621 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4822 0x03F, 0x00021E46, 5622 0x03F, 0x00025E46,
4823 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5623 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4824 0x03F, 0x00021E46, 5624 0x03F, 0x00025E46,
5625 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5626 0x03F, 0x00025E46,
5627 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5628 0x03F, 0x00025E46,
4825 0xA0000000, 0x00000000, 5629 0xA0000000, 0x00000000,
4826 0x03F, 0x00002A46, 5630 0x03F, 0x00002A46,
4827 0xB0000000, 0x00000000, 5631 0xB0000000, 0x00000000,
@@ -4836,9 +5640,13 @@ static const u32 rtw8822c_rf_a[] = {
4836 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5640 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4837 0x03F, 0x0000EA46, 5641 0x03F, 0x0000EA46,
4838 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5642 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4839 0x03F, 0x00021E46, 5643 0x03F, 0x00025E46,
4840 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5644 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4841 0x03F, 0x00021E46, 5645 0x03F, 0x00025E46,
5646 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5647 0x03F, 0x00025E46,
5648 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5649 0x03F, 0x00025E46,
4842 0xA0000000, 0x00000000, 5650 0xA0000000, 0x00000000,
4843 0x03F, 0x00002A46, 5651 0x03F, 0x00002A46,
4844 0xB0000000, 0x00000000, 5652 0xB0000000, 0x00000000,
@@ -4856,6 +5664,10 @@ static const u32 rtw8822c_rf_a[] = {
4856 0x03F, 0x00031E46, 5664 0x03F, 0x00031E46,
4857 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5665 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4858 0x03F, 0x00031E46, 5666 0x03F, 0x00031E46,
5667 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5668 0x03F, 0x00031E46,
5669 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5670 0x03F, 0x00031E46,
4859 0xA0000000, 0x00000000, 5671 0xA0000000, 0x00000000,
4860 0x03F, 0x00002A46, 5672 0x03F, 0x00002A46,
4861 0xB0000000, 0x00000000, 5673 0xB0000000, 0x00000000,
@@ -4870,9 +5682,13 @@ static const u32 rtw8822c_rf_a[] = {
4870 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5682 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4871 0x03F, 0x0000EA46, 5683 0x03F, 0x0000EA46,
4872 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5684 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4873 0x03F, 0x00021E46, 5685 0x03F, 0x00025E46,
4874 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5686 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4875 0x03F, 0x00021E46, 5687 0x03F, 0x00025E46,
5688 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5689 0x03F, 0x00025E46,
5690 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5691 0x03F, 0x00025E46,
4876 0xA0000000, 0x00000000, 5692 0xA0000000, 0x00000000,
4877 0x03F, 0x00002A46, 5693 0x03F, 0x00002A46,
4878 0xB0000000, 0x00000000, 5694 0xB0000000, 0x00000000,
@@ -4887,9 +5703,13 @@ static const u32 rtw8822c_rf_a[] = {
4887 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5703 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4888 0x03F, 0x0000EA46, 5704 0x03F, 0x0000EA46,
4889 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5705 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4890 0x03F, 0x00021E46, 5706 0x03F, 0x00025E46,
4891 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5707 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4892 0x03F, 0x00021E46, 5708 0x03F, 0x00025E46,
5709 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5710 0x03F, 0x00025E46,
5711 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5712 0x03F, 0x00025E46,
4893 0xA0000000, 0x00000000, 5713 0xA0000000, 0x00000000,
4894 0x03F, 0x00002A46, 5714 0x03F, 0x00002A46,
4895 0xB0000000, 0x00000000, 5715 0xB0000000, 0x00000000,
@@ -4907,6 +5727,10 @@ static const u32 rtw8822c_rf_a[] = {
4907 0x03F, 0x00031E46, 5727 0x03F, 0x00031E46,
4908 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5728 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4909 0x03F, 0x00031E46, 5729 0x03F, 0x00031E46,
5730 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5731 0x03F, 0x00031E46,
5732 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5733 0x03F, 0x00031E46,
4910 0xA0000000, 0x00000000, 5734 0xA0000000, 0x00000000,
4911 0x03F, 0x00002A46, 5735 0x03F, 0x00002A46,
4912 0xB0000000, 0x00000000, 5736 0xB0000000, 0x00000000,
@@ -4921,9 +5745,13 @@ static const u32 rtw8822c_rf_a[] = {
4921 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5745 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4922 0x03F, 0x0000EA46, 5746 0x03F, 0x0000EA46,
4923 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5747 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4924 0x03F, 0x00021E46, 5748 0x03F, 0x00025E46,
4925 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5749 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4926 0x03F, 0x00021E46, 5750 0x03F, 0x00025E46,
5751 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5752 0x03F, 0x00025E46,
5753 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5754 0x03F, 0x00025E46,
4927 0xA0000000, 0x00000000, 5755 0xA0000000, 0x00000000,
4928 0x03F, 0x00002A46, 5756 0x03F, 0x00002A46,
4929 0xB0000000, 0x00000000, 5757 0xB0000000, 0x00000000,
@@ -4938,9 +5766,13 @@ static const u32 rtw8822c_rf_a[] = {
4938 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5766 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4939 0x03F, 0x0000EA46, 5767 0x03F, 0x0000EA46,
4940 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5768 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4941 0x03F, 0x00021E46, 5769 0x03F, 0x00025E46,
4942 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5770 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4943 0x03F, 0x00021E46, 5771 0x03F, 0x00025E46,
5772 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5773 0x03F, 0x00025E46,
5774 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5775 0x03F, 0x00025E46,
4944 0xA0000000, 0x00000000, 5776 0xA0000000, 0x00000000,
4945 0x03F, 0x00002A46, 5777 0x03F, 0x00002A46,
4946 0xB0000000, 0x00000000, 5778 0xB0000000, 0x00000000,
@@ -4958,6 +5790,10 @@ static const u32 rtw8822c_rf_a[] = {
4958 0x03F, 0x00031E46, 5790 0x03F, 0x00031E46,
4959 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5791 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4960 0x03F, 0x00031E46, 5792 0x03F, 0x00031E46,
5793 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5794 0x03F, 0x00031E46,
5795 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5796 0x03F, 0x00031E46,
4961 0xA0000000, 0x00000000, 5797 0xA0000000, 0x00000000,
4962 0x03F, 0x00002A46, 5798 0x03F, 0x00002A46,
4963 0xB0000000, 0x00000000, 5799 0xB0000000, 0x00000000,
@@ -4972,9 +5808,13 @@ static const u32 rtw8822c_rf_a[] = {
4972 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5808 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4973 0x03F, 0x0000EA46, 5809 0x03F, 0x0000EA46,
4974 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5810 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4975 0x03F, 0x00021E46, 5811 0x03F, 0x00025E46,
4976 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5812 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4977 0x03F, 0x00021E46, 5813 0x03F, 0x00025E46,
5814 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5815 0x03F, 0x00025E46,
5816 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5817 0x03F, 0x00025E46,
4978 0xA0000000, 0x00000000, 5818 0xA0000000, 0x00000000,
4979 0x03F, 0x00002A46, 5819 0x03F, 0x00002A46,
4980 0xB0000000, 0x00000000, 5820 0xB0000000, 0x00000000,
@@ -4989,9 +5829,13 @@ static const u32 rtw8822c_rf_a[] = {
4989 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5829 0x92000002, 0x00000000, 0x40000000, 0x00000000,
4990 0x03F, 0x0000EA46, 5830 0x03F, 0x0000EA46,
4991 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5831 0x93000001, 0x00000000, 0x40000000, 0x00000000,
4992 0x03F, 0x00021E46, 5832 0x03F, 0x00025E46,
4993 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5833 0x93000002, 0x00000000, 0x40000000, 0x00000000,
4994 0x03F, 0x00021E46, 5834 0x03F, 0x00025E46,
5835 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5836 0x03F, 0x00025E46,
5837 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5838 0x03F, 0x00025E46,
4995 0xA0000000, 0x00000000, 5839 0xA0000000, 0x00000000,
4996 0x03F, 0x00002A46, 5840 0x03F, 0x00002A46,
4997 0xB0000000, 0x00000000, 5841 0xB0000000, 0x00000000,
@@ -5009,6 +5853,10 @@ static const u32 rtw8822c_rf_a[] = {
5009 0x03F, 0x00031E46, 5853 0x03F, 0x00031E46,
5010 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5854 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5011 0x03F, 0x00031E46, 5855 0x03F, 0x00031E46,
5856 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5857 0x03F, 0x00031E46,
5858 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5859 0x03F, 0x00031E46,
5012 0xA0000000, 0x00000000, 5860 0xA0000000, 0x00000000,
5013 0x03F, 0x00002A46, 5861 0x03F, 0x00002A46,
5014 0xB0000000, 0x00000000, 5862 0xB0000000, 0x00000000,
@@ -5023,9 +5871,13 @@ static const u32 rtw8822c_rf_a[] = {
5023 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5871 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5024 0x03F, 0x0000EA46, 5872 0x03F, 0x0000EA46,
5025 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5873 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5026 0x03F, 0x00021E46, 5874 0x03F, 0x00025E46,
5027 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5875 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5028 0x03F, 0x00021E46, 5876 0x03F, 0x00025E46,
5877 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5878 0x03F, 0x00025E46,
5879 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5880 0x03F, 0x00025E46,
5029 0xA0000000, 0x00000000, 5881 0xA0000000, 0x00000000,
5030 0x03F, 0x00002A46, 5882 0x03F, 0x00002A46,
5031 0xB0000000, 0x00000000, 5883 0xB0000000, 0x00000000,
@@ -5040,9 +5892,13 @@ static const u32 rtw8822c_rf_a[] = {
5040 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5892 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5041 0x03F, 0x0000EA46, 5893 0x03F, 0x0000EA46,
5042 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5894 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5043 0x03F, 0x00021E46, 5895 0x03F, 0x00025E46,
5044 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5896 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5045 0x03F, 0x00021E46, 5897 0x03F, 0x00025E46,
5898 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5899 0x03F, 0x00025E46,
5900 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5901 0x03F, 0x00025E46,
5046 0xA0000000, 0x00000000, 5902 0xA0000000, 0x00000000,
5047 0x03F, 0x00002A46, 5903 0x03F, 0x00002A46,
5048 0xB0000000, 0x00000000, 5904 0xB0000000, 0x00000000,
@@ -5060,6 +5916,10 @@ static const u32 rtw8822c_rf_a[] = {
5060 0x03F, 0x00031E46, 5916 0x03F, 0x00031E46,
5061 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5917 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5062 0x03F, 0x00031E46, 5918 0x03F, 0x00031E46,
5919 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5920 0x03F, 0x00031E46,
5921 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5922 0x03F, 0x00031E46,
5063 0xA0000000, 0x00000000, 5923 0xA0000000, 0x00000000,
5064 0x03F, 0x00002A46, 5924 0x03F, 0x00002A46,
5065 0xB0000000, 0x00000000, 5925 0xB0000000, 0x00000000,
@@ -5074,9 +5934,13 @@ static const u32 rtw8822c_rf_a[] = {
5074 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5934 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5075 0x03F, 0x0000EA46, 5935 0x03F, 0x0000EA46,
5076 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5936 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5077 0x03F, 0x00021E46, 5937 0x03F, 0x00025E46,
5078 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5938 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5079 0x03F, 0x00021E46, 5939 0x03F, 0x00025E46,
5940 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5941 0x03F, 0x00025E46,
5942 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5943 0x03F, 0x00025E46,
5080 0xA0000000, 0x00000000, 5944 0xA0000000, 0x00000000,
5081 0x03F, 0x00002A46, 5945 0x03F, 0x00002A46,
5082 0xB0000000, 0x00000000, 5946 0xB0000000, 0x00000000,
@@ -5091,9 +5955,13 @@ static const u32 rtw8822c_rf_a[] = {
5091 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5955 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5092 0x03F, 0x0000EA46, 5956 0x03F, 0x0000EA46,
5093 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5957 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5094 0x03F, 0x00021E46, 5958 0x03F, 0x00025E46,
5095 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5959 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5096 0x03F, 0x00021E46, 5960 0x03F, 0x00025E46,
5961 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5962 0x03F, 0x00025E46,
5963 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5964 0x03F, 0x00025E46,
5097 0xA0000000, 0x00000000, 5965 0xA0000000, 0x00000000,
5098 0x03F, 0x00002A46, 5966 0x03F, 0x00002A46,
5099 0xB0000000, 0x00000000, 5967 0xB0000000, 0x00000000,
@@ -5111,6 +5979,10 @@ static const u32 rtw8822c_rf_a[] = {
5111 0x03F, 0x00031E46, 5979 0x03F, 0x00031E46,
5112 0x93000002, 0x00000000, 0x40000000, 0x00000000, 5980 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5113 0x03F, 0x00031E46, 5981 0x03F, 0x00031E46,
5982 0x93000003, 0x00000000, 0x40000000, 0x00000000,
5983 0x03F, 0x00031E46,
5984 0x93000004, 0x00000000, 0x40000000, 0x00000000,
5985 0x03F, 0x00031E46,
5114 0xA0000000, 0x00000000, 5986 0xA0000000, 0x00000000,
5115 0x03F, 0x00002A46, 5987 0x03F, 0x00002A46,
5116 0xB0000000, 0x00000000, 5988 0xB0000000, 0x00000000,
@@ -5125,9 +5997,13 @@ static const u32 rtw8822c_rf_a[] = {
5125 0x92000002, 0x00000000, 0x40000000, 0x00000000, 5997 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5126 0x03F, 0x0000EA46, 5998 0x03F, 0x0000EA46,
5127 0x93000001, 0x00000000, 0x40000000, 0x00000000, 5999 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5128 0x03F, 0x00021E46, 6000 0x03F, 0x00025E46,
5129 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6001 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5130 0x03F, 0x00021E46, 6002 0x03F, 0x00025E46,
6003 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6004 0x03F, 0x00025E46,
6005 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6006 0x03F, 0x00025E46,
5131 0xA0000000, 0x00000000, 6007 0xA0000000, 0x00000000,
5132 0x03F, 0x00002A46, 6008 0x03F, 0x00002A46,
5133 0xB0000000, 0x00000000, 6009 0xB0000000, 0x00000000,
@@ -5142,9 +6018,13 @@ static const u32 rtw8822c_rf_a[] = {
5142 0x92000002, 0x00000000, 0x40000000, 0x00000000, 6018 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5143 0x03F, 0x0000EA46, 6019 0x03F, 0x0000EA46,
5144 0x93000001, 0x00000000, 0x40000000, 0x00000000, 6020 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5145 0x03F, 0x00021E46, 6021 0x03F, 0x00025E46,
5146 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6022 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5147 0x03F, 0x00021E46, 6023 0x03F, 0x00025E46,
6024 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6025 0x03F, 0x00025E46,
6026 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6027 0x03F, 0x00025E46,
5148 0xA0000000, 0x00000000, 6028 0xA0000000, 0x00000000,
5149 0x03F, 0x00002A46, 6029 0x03F, 0x00002A46,
5150 0xB0000000, 0x00000000, 6030 0xB0000000, 0x00000000,
@@ -5162,6 +6042,10 @@ static const u32 rtw8822c_rf_a[] = {
5162 0x03F, 0x00031E46, 6042 0x03F, 0x00031E46,
5163 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6043 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5164 0x03F, 0x00031E46, 6044 0x03F, 0x00031E46,
6045 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6046 0x03F, 0x00031E46,
6047 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6048 0x03F, 0x00031E46,
5165 0xA0000000, 0x00000000, 6049 0xA0000000, 0x00000000,
5166 0x03F, 0x00002A46, 6050 0x03F, 0x00002A46,
5167 0xB0000000, 0x00000000, 6051 0xB0000000, 0x00000000,
@@ -5179,6 +6063,10 @@ static const u32 rtw8822c_rf_a[] = {
5179 0x03F, 0x00021E46, 6063 0x03F, 0x00021E46,
5180 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6064 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5181 0x03F, 0x00021E46, 6065 0x03F, 0x00021E46,
6066 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6067 0x03F, 0x00021E46,
6068 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6069 0x03F, 0x00021E46,
5182 0xA0000000, 0x00000000, 6070 0xA0000000, 0x00000000,
5183 0x03F, 0x00002A46, 6071 0x03F, 0x00002A46,
5184 0xB0000000, 0x00000000, 6072 0xB0000000, 0x00000000,
@@ -5278,17 +6166,17 @@ static const u32 rtw8822c_rf_a[] = {
5278 0x03F, 0x00000DF7, 6166 0x03F, 0x00000DF7,
5279 0x93000001, 0x00000000, 0x40000000, 0x00000000, 6167 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5280 0x033, 0x00000060, 6168 0x033, 0x00000060,
5281 0x03F, 0x00000468, 6169 0x03F, 0x00000467,
5282 0x033, 0x00000061, 6170 0x033, 0x00000061,
5283 0x03F, 0x00000868, 6171 0x03F, 0x00000867,
5284 0x033, 0x00000062, 6172 0x033, 0x00000062,
5285 0x03F, 0x00000909, 6173 0x03F, 0x00000908,
5286 0x033, 0x00000063, 6174 0x033, 0x00000063,
5287 0x03F, 0x00000D0A, 6175 0x03F, 0x00000D09,
5288 0x033, 0x00000064, 6176 0x033, 0x00000064,
5289 0x03F, 0x00000D4A, 6177 0x03F, 0x00000D49,
5290 0x033, 0x00000065, 6178 0x033, 0x00000065,
5291 0x03F, 0x00000D8B, 6179 0x03F, 0x00000D8A,
5292 0x033, 0x00000066, 6180 0x033, 0x00000066,
5293 0x03F, 0x00000DEB, 6181 0x03F, 0x00000DEB,
5294 0x033, 0x00000067, 6182 0x033, 0x00000067,
@@ -5301,17 +6189,63 @@ static const u32 rtw8822c_rf_a[] = {
5301 0x03F, 0x00000DF7, 6189 0x03F, 0x00000DF7,
5302 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6190 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5303 0x033, 0x00000060, 6191 0x033, 0x00000060,
5304 0x03F, 0x00000468, 6192 0x03F, 0x00000467,
5305 0x033, 0x00000061, 6193 0x033, 0x00000061,
5306 0x03F, 0x00000868, 6194 0x03F, 0x00000867,
5307 0x033, 0x00000062, 6195 0x033, 0x00000062,
5308 0x03F, 0x00000909, 6196 0x03F, 0x00000908,
5309 0x033, 0x00000063, 6197 0x033, 0x00000063,
5310 0x03F, 0x00000D0A, 6198 0x03F, 0x00000D09,
5311 0x033, 0x00000064, 6199 0x033, 0x00000064,
5312 0x03F, 0x00000D4A, 6200 0x03F, 0x00000D49,
5313 0x033, 0x00000065, 6201 0x033, 0x00000065,
5314 0x03F, 0x00000D8B, 6202 0x03F, 0x00000D8A,
6203 0x033, 0x00000066,
6204 0x03F, 0x00000DEB,
6205 0x033, 0x00000067,
6206 0x03F, 0x00000DEE,
6207 0x033, 0x00000068,
6208 0x03F, 0x00000DF1,
6209 0x033, 0x00000069,
6210 0x03F, 0x00000DF4,
6211 0x033, 0x0000006A,
6212 0x03F, 0x00000DF7,
6213 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6214 0x033, 0x00000060,
6215 0x03F, 0x00000467,
6216 0x033, 0x00000061,
6217 0x03F, 0x00000867,
6218 0x033, 0x00000062,
6219 0x03F, 0x00000908,
6220 0x033, 0x00000063,
6221 0x03F, 0x00000D09,
6222 0x033, 0x00000064,
6223 0x03F, 0x00000D49,
6224 0x033, 0x00000065,
6225 0x03F, 0x00000D8A,
6226 0x033, 0x00000066,
6227 0x03F, 0x00000DEB,
6228 0x033, 0x00000067,
6229 0x03F, 0x00000DEE,
6230 0x033, 0x00000068,
6231 0x03F, 0x00000DF1,
6232 0x033, 0x00000069,
6233 0x03F, 0x00000DF4,
6234 0x033, 0x0000006A,
6235 0x03F, 0x00000DF7,
6236 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6237 0x033, 0x00000060,
6238 0x03F, 0x00000467,
6239 0x033, 0x00000061,
6240 0x03F, 0x00000867,
6241 0x033, 0x00000062,
6242 0x03F, 0x00000908,
6243 0x033, 0x00000063,
6244 0x03F, 0x00000D09,
6245 0x033, 0x00000064,
6246 0x03F, 0x00000D49,
6247 0x033, 0x00000065,
6248 0x03F, 0x00000D8A,
5315 0x033, 0x00000066, 6249 0x033, 0x00000066,
5316 0x03F, 0x00000DEB, 6250 0x03F, 0x00000DEB,
5317 0x033, 0x00000067, 6251 0x033, 0x00000067,
@@ -5440,17 +6374,17 @@ static const u32 rtw8822c_rf_a[] = {
5440 0x03F, 0x00000DF7, 6374 0x03F, 0x00000DF7,
5441 0x93000001, 0x00000000, 0x40000000, 0x00000000, 6375 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5442 0x033, 0x00000020, 6376 0x033, 0x00000020,
5443 0x03F, 0x00000468, 6377 0x03F, 0x00000467,
5444 0x033, 0x00000021, 6378 0x033, 0x00000021,
5445 0x03F, 0x00000868, 6379 0x03F, 0x00000867,
5446 0x033, 0x00000022, 6380 0x033, 0x00000022,
5447 0x03F, 0x00000909, 6381 0x03F, 0x00000908,
5448 0x033, 0x00000023, 6382 0x033, 0x00000023,
5449 0x03F, 0x00000D0A, 6383 0x03F, 0x00000D09,
5450 0x033, 0x00000024, 6384 0x033, 0x00000024,
5451 0x03F, 0x00000D4A, 6385 0x03F, 0x00000D49,
5452 0x033, 0x00000025, 6386 0x033, 0x00000025,
5453 0x03F, 0x00000D8B, 6387 0x03F, 0x00000D8A,
5454 0x033, 0x00000026, 6388 0x033, 0x00000026,
5455 0x03F, 0x00000DEB, 6389 0x03F, 0x00000DEB,
5456 0x033, 0x00000027, 6390 0x033, 0x00000027,
@@ -5463,17 +6397,63 @@ static const u32 rtw8822c_rf_a[] = {
5463 0x03F, 0x00000DF7, 6397 0x03F, 0x00000DF7,
5464 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6398 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5465 0x033, 0x00000020, 6399 0x033, 0x00000020,
5466 0x03F, 0x00000468, 6400 0x03F, 0x00000467,
5467 0x033, 0x00000021, 6401 0x033, 0x00000021,
5468 0x03F, 0x00000868, 6402 0x03F, 0x00000867,
5469 0x033, 0x00000022, 6403 0x033, 0x00000022,
5470 0x03F, 0x00000909, 6404 0x03F, 0x00000908,
5471 0x033, 0x00000023, 6405 0x033, 0x00000023,
5472 0x03F, 0x00000D0A, 6406 0x03F, 0x00000D09,
5473 0x033, 0x00000024, 6407 0x033, 0x00000024,
5474 0x03F, 0x00000D4A, 6408 0x03F, 0x00000D49,
5475 0x033, 0x00000025, 6409 0x033, 0x00000025,
5476 0x03F, 0x00000D8B, 6410 0x03F, 0x00000D8A,
6411 0x033, 0x00000026,
6412 0x03F, 0x00000DEB,
6413 0x033, 0x00000027,
6414 0x03F, 0x00000DEE,
6415 0x033, 0x00000028,
6416 0x03F, 0x00000DF1,
6417 0x033, 0x00000029,
6418 0x03F, 0x00000DF4,
6419 0x033, 0x0000002A,
6420 0x03F, 0x00000DF7,
6421 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6422 0x033, 0x00000020,
6423 0x03F, 0x00000467,
6424 0x033, 0x00000021,
6425 0x03F, 0x00000867,
6426 0x033, 0x00000022,
6427 0x03F, 0x00000908,
6428 0x033, 0x00000023,
6429 0x03F, 0x00000D09,
6430 0x033, 0x00000024,
6431 0x03F, 0x00000D49,
6432 0x033, 0x00000025,
6433 0x03F, 0x00000D8A,
6434 0x033, 0x00000026,
6435 0x03F, 0x00000DEB,
6436 0x033, 0x00000027,
6437 0x03F, 0x00000DEE,
6438 0x033, 0x00000028,
6439 0x03F, 0x00000DF1,
6440 0x033, 0x00000029,
6441 0x03F, 0x00000DF4,
6442 0x033, 0x0000002A,
6443 0x03F, 0x00000DF7,
6444 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6445 0x033, 0x00000020,
6446 0x03F, 0x00000467,
6447 0x033, 0x00000021,
6448 0x03F, 0x00000867,
6449 0x033, 0x00000022,
6450 0x03F, 0x00000908,
6451 0x033, 0x00000023,
6452 0x03F, 0x00000D09,
6453 0x033, 0x00000024,
6454 0x03F, 0x00000D49,
6455 0x033, 0x00000025,
6456 0x03F, 0x00000D8A,
5477 0x033, 0x00000026, 6457 0x033, 0x00000026,
5478 0x03F, 0x00000DEB, 6458 0x03F, 0x00000DEB,
5479 0x033, 0x00000027, 6459 0x033, 0x00000027,
@@ -5526,15 +6506,25 @@ static const u32 rtw8822c_rf_a[] = {
5526 0x92000002, 0x00000000, 0x40000000, 0x00000000, 6506 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5527 0x0B3, 0x0007C760, 6507 0x0B3, 0x0007C760,
5528 0x93000001, 0x00000000, 0x40000000, 0x00000000, 6508 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5529 0x0B3, 0x0007C760, 6509 0x0B3, 0x000FC760,
5530 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6510 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5531 0x0B3, 0x0007C760, 6511 0x0B3, 0x000FC760,
6512 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6513 0x0B3, 0x000FC760,
6514 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6515 0x0B3, 0x000FC760,
5532 0xA0000000, 0x00000000, 6516 0xA0000000, 0x00000000,
5533 0x0B3, 0x0007C760, 6517 0x0B3, 0x0007C760,
5534 0xB0000000, 0x00000000, 6518 0xB0000000, 0x00000000,
5535 0x0B4, 0x00099D40, 6519 0x0B4, 0x00099D40,
5536 0x0B5, 0x0004103F, 6520 0x0B5, 0x0004103F,
6521 0x83000003, 0x00000000, 0x40000000, 0x00000000,
6522 0x0B6, 0x000387F8,
6523 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6524 0x0B6, 0x000387F8,
6525 0xA0000000, 0x00000000,
5537 0x0B6, 0x000187F8, 6526 0x0B6, 0x000187F8,
6527 0xB0000000, 0x00000000,
5538 0x0B7, 0x00030018, 6528 0x0B7, 0x00030018,
5539 0x0BC, 0x00000008, 6529 0x0BC, 0x00000008,
5540 0x0D3, 0x00000542, 6530 0x0D3, 0x00000542,
@@ -5555,9 +6545,13 @@ static const u32 rtw8822c_rf_a[] = {
5555 0x92000002, 0x00000000, 0x40000000, 0x00000000, 6545 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5556 0x0B3, 0x0007C700, 6546 0x0B3, 0x0007C700,
5557 0x93000001, 0x00000000, 0x40000000, 0x00000000, 6547 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5558 0x0B3, 0x0007C700, 6548 0x0B3, 0x000FC760,
5559 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6549 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5560 0x0B3, 0x0007C700, 6550 0x0B3, 0x000FC760,
6551 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6552 0x0B3, 0x000FC760,
6553 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6554 0x0B3, 0x000FC760,
5561 0xA0000000, 0x00000000, 6555 0xA0000000, 0x00000000,
5562 0x0B3, 0x0007C700, 6556 0x0B3, 0x0007C700,
5563 0xB0000000, 0x00000000, 6557 0xB0000000, 0x00000000,
@@ -5573,9 +6567,13 @@ static const u32 rtw8822c_rf_a[] = {
5573 0x92000002, 0x00000000, 0x40000000, 0x00000000, 6567 0x92000002, 0x00000000, 0x40000000, 0x00000000,
5574 0x0B3, 0x0007C760, 6568 0x0B3, 0x0007C760,
5575 0x93000001, 0x00000000, 0x40000000, 0x00000000, 6569 0x93000001, 0x00000000, 0x40000000, 0x00000000,
5576 0x0B3, 0x0007C760, 6570 0x0B3, 0x000FC760,
5577 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6571 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5578 0x0B3, 0x0007C760, 6572 0x0B3, 0x000FC760,
6573 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6574 0x0B3, 0x000FC760,
6575 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6576 0x0B3, 0x000FC760,
5579 0xA0000000, 0x00000000, 6577 0xA0000000, 0x00000000,
5580 0x0B3, 0x0007C760, 6578 0x0B3, 0x0007C760,
5581 0xB0000000, 0x00000000, 6579 0xB0000000, 0x00000000,
@@ -5584,10 +6582,14 @@ static const u32 rtw8822c_rf_a[] = {
5584 0x0CD, 0x00089600, 6582 0x0CD, 0x00089600,
5585 0x018, 0x00013108, 6583 0x018, 0x00013108,
5586 0x0FE, 0x00000000, 6584 0x0FE, 0x00000000,
6585 0x0FE, 0x00000000,
5587 0x0B8, 0x000C0440, 6586 0x0B8, 0x000C0440,
5588 0x0BA, 0x000E840D, 6587 0x0BA, 0x000E840D,
5589 0x0FE, 0x00000000, 6588 0x0FE, 0x00000000,
6589 0x0FE, 0x00000000,
5590 0x018, 0x00013124, 6590 0x018, 0x00013124,
6591 0x0FE, 0x00000000,
6592 0x0FE, 0x00000000,
5591 0x059, 0x000A0000, 6593 0x059, 0x000A0000,
5592 0x05A, 0x00060000, 6594 0x05A, 0x00060000,
5593 0x05B, 0x00014000, 6595 0x05B, 0x00014000,
@@ -5595,6 +6597,18 @@ static const u32 rtw8822c_rf_a[] = {
5595 0x033, 0x00000001, 6597 0x033, 0x00000001,
5596 0x03F, 0x0000000F, 6598 0x03F, 0x0000000F,
5597 0x0ED, 0x00000000, 6599 0x0ED, 0x00000000,
6600 0x83000001, 0x00000000, 0x40000000, 0x00000000,
6601 0x0DD, 0x00000540,
6602 0x93000002, 0x00000000, 0x40000000, 0x00000000,
6603 0x0DD, 0x00000540,
6604 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6605 0x0DD, 0x00000540,
6606 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6607 0x0DD, 0x00000540,
6608 0xA0000000, 0x00000000,
6609 0x0DD, 0x00000500,
6610 0xB0000000, 0x00000000,
6611 0x0BC, 0x00000004,
5598 0x0EE, 0x00000002, 6612 0x0EE, 0x00000002,
5599 0x033, 0x00000017, 6613 0x033, 0x00000017,
5600 0x03F, 0x0000003F, 6614 0x03F, 0x0000003F,
@@ -5672,9 +6686,24 @@ static const u32 rtw8822c_rf_a[] = {
5672 0x0FE, 0x00000000, 6686 0x0FE, 0x00000000,
5673 0x0FE, 0x00000000, 6687 0x0FE, 0x00000000,
5674 0x092, 0x00084800, 6688 0x092, 0x00084800,
5675 0x08F, 0x0000182C, 6689 0x08F, 0x00001B4C,
5676 0x088, 0x0004326B, 6690 0x088, 0x0004326B,
5677 0x019, 0x00000005, 6691 0x019, 0x00000005,
6692 0x0EF, 0x00080000,
6693 0x033, 0x00000004,
6694 0x03E, 0x00000003,
6695 0x03F, 0x000F60FF,
6696 0x0EF, 0x00000000,
6697 0x0EF, 0x00080000,
6698 0x033, 0x00000006,
6699 0x03E, 0x00000003,
6700 0x03F, 0x000760FF,
6701 0x0EF, 0x00000000,
6702 0x0EF, 0x00080000,
6703 0x033, 0x00000007,
6704 0x03E, 0x00000003,
6705 0x03F, 0x0007DEFF,
6706 0x0EF, 0x00000000,
5678}; 6707};
5679 6708
5680RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_a, A); 6709RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_a, A);
@@ -5685,7 +6714,7 @@ static const u32 rtw8822c_rf_b[] = {
5685 0x093, 0x0008483F, 6714 0x093, 0x0008483F,
5686 0x0EF, 0x00080000, 6715 0x0EF, 0x00080000,
5687 0x033, 0x00000001, 6716 0x033, 0x00000001,
5688 0x03F, 0x00091020, 6717 0x03F, 0x00091230,
5689 0x0EF, 0x00000000, 6718 0x0EF, 0x00000000,
5690 0x0DE, 0x00000020, 6719 0x0DE, 0x00000020,
5691 0x81000001, 0x00000000, 0x40000000, 0x00000000, 6720 0x81000001, 0x00000000, 0x40000000, 0x00000000,
@@ -5700,6 +6729,10 @@ static const u32 rtw8822c_rf_b[] = {
5700 0x08E, 0x000A5540, 6729 0x08E, 0x000A5540,
5701 0x93000002, 0x00000000, 0x40000000, 0x00000000, 6730 0x93000002, 0x00000000, 0x40000000, 0x00000000,
5702 0x08E, 0x000A5540, 6731 0x08E, 0x000A5540,
6732 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6733 0x08E, 0x000A5540,
6734 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6735 0x08E, 0x000A5540,
5703 0xA0000000, 0x00000000, 6736 0xA0000000, 0x00000000,
5704 0x08E, 0x000A5540, 6737 0x08E, 0x000A5540,
5705 0xB0000000, 0x00000000, 6738 0xB0000000, 0x00000000,
@@ -5761,6 +6794,24 @@ static const u32 rtw8822c_rf_b[] = {
5761 0x033, 0x00000002, 6794 0x033, 0x00000002,
5762 0x03F, 0x0000002A, 6795 0x03F, 0x0000002A,
5763 0x0EE, 0x00000000, 6796 0x0EE, 0x00000000,
6797 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6798 0x0EE, 0x00000010,
6799 0x033, 0x00000001,
6800 0x03F, 0x0000002A,
6801 0x033, 0x00000001,
6802 0x03F, 0x0000002A,
6803 0x033, 0x00000002,
6804 0x03F, 0x0000002A,
6805 0x0EE, 0x00000000,
6806 0x93000004, 0x00000000, 0x40000000, 0x00000000,
6807 0x0EE, 0x00000010,
6808 0x033, 0x00000001,
6809 0x03F, 0x0000002A,
6810 0x033, 0x00000001,
6811 0x03F, 0x0000002A,
6812 0x033, 0x00000002,
6813 0x03F, 0x0000002A,
6814 0x0EE, 0x00000000,
5764 0xA0000000, 0x00000000, 6815 0xA0000000, 0x00000000,
5765 0x0EE, 0x00000010, 6816 0x0EE, 0x00000010,
5766 0x033, 0x00000001, 6817 0x033, 0x00000001,
@@ -5927,6 +6978,58 @@ static const u32 rtw8822c_rf_b[] = {
5927 0x03F, 0x00000180, 6978 0x03F, 0x00000180,
5928 0x033, 0x00000004, 6979 0x033, 0x00000004,
5929 0x03F, 0x00000040, 6980 0x03F, 0x00000040,
6981 0x93000003, 0x00000000, 0x40000000, 0x00000000,
6982 0x0EF, 0x00010000,
6983 0x033, 0x0000000F,
6984 0x03F, 0x000773C0,
6985 0x033, 0x0000000E,
6986 0x03F, 0x000FF3C0,
6987 0x033, 0x0000000D,
6988 0x03F, 0x000773E8,
6989 0x033, 0x0000000C,
6990 0x03F, 0x000FF3E8,
6991 0x033, 0x0000000B,
6992 0x03F, 0x00000287,
6993 0x033, 0x0000000A,
6994 0x03F, 0x000002A8,
6995 0x033, 0x00000009,
6996 0x03F, 0x00000207,
6997 0x033, 0x00000008,
6998 0x03F, 0x000FF280,
6999 0x033, 0x00000007,
7000 0x03F, 0x00000200,
7001 0x033, 0x00000006,
7002 0x03F, 0x000001C0,
7003 0x033, 0x00000005,
7004 0x03F, 0x00000180,
7005 0x033, 0x00000004,
7006 0x03F, 0x00000040,
7007 0x93000004, 0x00000000, 0x40000000, 0x00000000,
7008 0x0EF, 0x00010000,
7009 0x033, 0x0000000F,
7010 0x03F, 0x000773C0,
7011 0x033, 0x0000000E,
7012 0x03F, 0x000FF3C0,
7013 0x033, 0x0000000D,
7014 0x03F, 0x000773E8,
7015 0x033, 0x0000000C,
7016 0x03F, 0x000FF3E8,
7017 0x033, 0x0000000B,
7018 0x03F, 0x00000287,
7019 0x033, 0x0000000A,
7020 0x03F, 0x000002A8,
7021 0x033, 0x00000009,
7022 0x03F, 0x00000207,
7023 0x033, 0x00000008,
7024 0x03F, 0x000FF280,
7025 0x033, 0x00000007,
7026 0x03F, 0x00000200,
7027 0x033, 0x00000006,
7028 0x03F, 0x000001C0,
7029 0x033, 0x00000005,
7030 0x03F, 0x00000180,
7031 0x033, 0x00000004,
7032 0x03F, 0x00000040,
5930 0xA0000000, 0x00000000, 7033 0xA0000000, 0x00000000,
5931 0x0EF, 0x00010000, 7034 0x0EF, 0x00010000,
5932 0x033, 0x0000000F, 7035 0x033, 0x0000000F,
@@ -6106,6 +7209,56 @@ static const u32 rtw8822c_rf_b[] = {
6106 0x03F, 0x00000180, 7209 0x03F, 0x00000180,
6107 0x033, 0x00000014, 7210 0x033, 0x00000014,
6108 0x03F, 0x00000040, 7211 0x03F, 0x00000040,
7212 0x93000003, 0x00000000, 0x40000000, 0x00000000,
7213 0x033, 0x0000001F,
7214 0x03F, 0x000773C0,
7215 0x033, 0x0000001E,
7216 0x03F, 0x000FF3C0,
7217 0x033, 0x0000001D,
7218 0x03F, 0x000773E8,
7219 0x033, 0x0000001C,
7220 0x03F, 0x000FF3E8,
7221 0x033, 0x0000001B,
7222 0x03F, 0x00000287,
7223 0x033, 0x0000001A,
7224 0x03F, 0x000002A8,
7225 0x033, 0x00000019,
7226 0x03F, 0x00000207,
7227 0x033, 0x00000018,
7228 0x03F, 0x000FF280,
7229 0x033, 0x00000017,
7230 0x03F, 0x00000200,
7231 0x033, 0x00000016,
7232 0x03F, 0x000001C0,
7233 0x033, 0x00000015,
7234 0x03F, 0x00000180,
7235 0x033, 0x00000014,
7236 0x03F, 0x00000040,
7237 0x93000004, 0x00000000, 0x40000000, 0x00000000,
7238 0x033, 0x0000001F,
7239 0x03F, 0x000773C0,
7240 0x033, 0x0000001E,
7241 0x03F, 0x000FF3C0,
7242 0x033, 0x0000001D,
7243 0x03F, 0x000773E8,
7244 0x033, 0x0000001C,
7245 0x03F, 0x000FF3E8,
7246 0x033, 0x0000001B,
7247 0x03F, 0x00000287,
7248 0x033, 0x0000001A,
7249 0x03F, 0x000002A8,
7250 0x033, 0x00000019,
7251 0x03F, 0x00000207,
7252 0x033, 0x00000018,
7253 0x03F, 0x000FF280,
7254 0x033, 0x00000017,
7255 0x03F, 0x00000200,
7256 0x033, 0x00000016,
7257 0x03F, 0x000001C0,
7258 0x033, 0x00000015,
7259 0x03F, 0x00000180,
7260 0x033, 0x00000014,
7261 0x03F, 0x00000040,
6109 0xA0000000, 0x00000000, 7262 0xA0000000, 0x00000000,
6110 0x033, 0x0000001F, 7263 0x033, 0x0000001F,
6111 0x03F, 0x000773E8, 7264 0x03F, 0x000773E8,
@@ -6284,6 +7437,56 @@ static const u32 rtw8822c_rf_b[] = {
6284 0x03F, 0x00000180, 7437 0x03F, 0x00000180,
6285 0x033, 0x00000024, 7438 0x033, 0x00000024,
6286 0x03F, 0x00000040, 7439 0x03F, 0x00000040,
7440 0x93000003, 0x00000000, 0x40000000, 0x00000000,
7441 0x033, 0x0000002F,
7442 0x03F, 0x000773C0,
7443 0x033, 0x0000002E,
7444 0x03F, 0x000FF3C0,
7445 0x033, 0x0000002D,
7446 0x03F, 0x000773E8,
7447 0x033, 0x0000002C,
7448 0x03F, 0x000FF3E8,
7449 0x033, 0x0000002B,
7450 0x03F, 0x00000287,
7451 0x033, 0x0000002A,
7452 0x03F, 0x000002A8,
7453 0x033, 0x00000029,
7454 0x03F, 0x00000207,
7455 0x033, 0x00000028,
7456 0x03F, 0x000FF280,
7457 0x033, 0x00000027,
7458 0x03F, 0x00000200,
7459 0x033, 0x00000026,
7460 0x03F, 0x000001C0,
7461 0x033, 0x00000025,
7462 0x03F, 0x00000180,
7463 0x033, 0x00000024,
7464 0x03F, 0x00000040,
7465 0x93000004, 0x00000000, 0x40000000, 0x00000000,
7466 0x033, 0x0000002F,
7467 0x03F, 0x000773C0,
7468 0x033, 0x0000002E,
7469 0x03F, 0x000FF3C0,
7470 0x033, 0x0000002D,
7471 0x03F, 0x000773E8,
7472 0x033, 0x0000002C,
7473 0x03F, 0x000FF3E8,
7474 0x033, 0x0000002B,
7475 0x03F, 0x00000287,
7476 0x033, 0x0000002A,
7477 0x03F, 0x000002A8,
7478 0x033, 0x00000029,
7479 0x03F, 0x00000207,
7480 0x033, 0x00000028,
7481 0x03F, 0x000FF280,
7482 0x033, 0x00000027,
7483 0x03F, 0x00000200,
7484 0x033, 0x00000026,
7485 0x03F, 0x000001C0,
7486 0x033, 0x00000025,
7487 0x03F, 0x00000180,
7488 0x033, 0x00000024,
7489 0x03F, 0x00000040,
6287 0xA0000000, 0x00000000, 7490 0xA0000000, 0x00000000,
6288 0x033, 0x0000002F, 7491 0x033, 0x0000002F,
6289 0x03F, 0x000773E8, 7492 0x03F, 0x000773E8,
@@ -6462,6 +7665,56 @@ static const u32 rtw8822c_rf_b[] = {
6462 0x03F, 0x00000180, 7665 0x03F, 0x00000180,
6463 0x033, 0x00000034, 7666 0x033, 0x00000034,
6464 0x03F, 0x00000040, 7667 0x03F, 0x00000040,
7668 0x93000003, 0x00000000, 0x40000000, 0x00000000,
7669 0x033, 0x0000003F,
7670 0x03F, 0x000773C0,
7671 0x033, 0x0000003E,
7672 0x03F, 0x000FF3C0,
7673 0x033, 0x0000003D,
7674 0x03F, 0x000773E8,
7675 0x033, 0x0000003C,
7676 0x03F, 0x000FF3E8,
7677 0x033, 0x0000003B,
7678 0x03F, 0x00000287,
7679 0x033, 0x0000003A,
7680 0x03F, 0x000002A8,
7681 0x033, 0x00000039,
7682 0x03F, 0x00000207,
7683 0x033, 0x00000038,
7684 0x03F, 0x000FF280,
7685 0x033, 0x00000037,
7686 0x03F, 0x00000200,
7687 0x033, 0x00000036,
7688 0x03F, 0x000001C0,
7689 0x033, 0x00000035,
7690 0x03F, 0x00000180,
7691 0x033, 0x00000034,
7692 0x03F, 0x00000040,
7693 0x93000004, 0x00000000, 0x40000000, 0x00000000,
7694 0x033, 0x0000003F,
7695 0x03F, 0x000773C0,
7696 0x033, 0x0000003E,
7697 0x03F, 0x000FF3C0,
7698 0x033, 0x0000003D,
7699 0x03F, 0x000773E8,
7700 0x033, 0x0000003C,
7701 0x03F, 0x000FF3E8,
7702 0x033, 0x0000003B,
7703 0x03F, 0x00000287,
7704 0x033, 0x0000003A,
7705 0x03F, 0x000002A8,
7706 0x033, 0x00000039,
7707 0x03F, 0x00000207,
7708 0x033, 0x00000038,
7709 0x03F, 0x000FF280,
7710 0x033, 0x00000037,
7711 0x03F, 0x00000200,
7712 0x033, 0x00000036,
7713 0x03F, 0x000001C0,
7714 0x033, 0x00000035,
7715 0x03F, 0x00000180,
7716 0x033, 0x00000034,
7717 0x03F, 0x00000040,
6465 0xA0000000, 0x00000000, 7718 0xA0000000, 0x00000000,
6466 0x033, 0x0000003F, 7719 0x033, 0x0000003F,
6467 0x03F, 0x000773E8, 7720 0x03F, 0x000773E8,
@@ -6640,6 +7893,56 @@ static const u32 rtw8822c_rf_b[] = {
6640 0x03F, 0x00000180, 7893 0x03F, 0x00000180,
6641 0x033, 0x00000044, 7894 0x033, 0x00000044,
6642 0x03F, 0x00000040, 7895 0x03F, 0x00000040,
7896 0x93000003, 0x00000000, 0x40000000, 0x00000000,
7897 0x033, 0x0000004F,
7898 0x03F, 0x000773C0,
7899 0x033, 0x0000004E,
7900 0x03F, 0x000FF3C0,
7901 0x033, 0x0000004D,
7902 0x03F, 0x000773E8,
7903 0x033, 0x0000004C,
7904 0x03F, 0x000FF3E8,
7905 0x033, 0x0000004B,
7906 0x03F, 0x00000287,
7907 0x033, 0x0000004A,
7908 0x03F, 0x000002A8,
7909 0x033, 0x00000049,
7910 0x03F, 0x00000207,
7911 0x033, 0x00000048,
7912 0x03F, 0x000FF280,
7913 0x033, 0x00000047,
7914 0x03F, 0x00000200,
7915 0x033, 0x00000046,
7916 0x03F, 0x000001C0,
7917 0x033, 0x00000045,
7918 0x03F, 0x00000180,
7919 0x033, 0x00000044,
7920 0x03F, 0x00000040,
7921 0x93000004, 0x00000000, 0x40000000, 0x00000000,
7922 0x033, 0x0000004F,
7923 0x03F, 0x000773C0,
7924 0x033, 0x0000004E,
7925 0x03F, 0x000FF3C0,
7926 0x033, 0x0000004D,
7927 0x03F, 0x000773E8,
7928 0x033, 0x0000004C,
7929 0x03F, 0x000FF3E8,
7930 0x033, 0x0000004B,
7931 0x03F, 0x00000287,
7932 0x033, 0x0000004A,
7933 0x03F, 0x000002A8,
7934 0x033, 0x00000049,
7935 0x03F, 0x00000207,
7936 0x033, 0x00000048,
7937 0x03F, 0x000FF280,
7938 0x033, 0x00000047,
7939 0x03F, 0x00000200,
7940 0x033, 0x00000046,
7941 0x03F, 0x000001C0,
7942 0x033, 0x00000045,
7943 0x03F, 0x00000180,
7944 0x033, 0x00000044,
7945 0x03F, 0x00000040,
6643 0xA0000000, 0x00000000, 7946 0xA0000000, 0x00000000,
6644 0x033, 0x0000004F, 7947 0x033, 0x0000004F,
6645 0x03F, 0x000773E8, 7948 0x03F, 0x000773E8,
@@ -6818,6 +8121,56 @@ static const u32 rtw8822c_rf_b[] = {
6818 0x03F, 0x00000180, 8121 0x03F, 0x00000180,
6819 0x033, 0x00000054, 8122 0x033, 0x00000054,
6820 0x03F, 0x00000040, 8123 0x03F, 0x00000040,
8124 0x93000003, 0x00000000, 0x40000000, 0x00000000,
8125 0x033, 0x0000005F,
8126 0x03F, 0x000773C0,
8127 0x033, 0x0000005E,
8128 0x03F, 0x000FF3C0,
8129 0x033, 0x0000005D,
8130 0x03F, 0x000773E8,
8131 0x033, 0x0000005C,
8132 0x03F, 0x000FF3E8,
8133 0x033, 0x0000005B,
8134 0x03F, 0x00000287,
8135 0x033, 0x0000005A,
8136 0x03F, 0x000002A8,
8137 0x033, 0x00000059,
8138 0x03F, 0x00000207,
8139 0x033, 0x00000058,
8140 0x03F, 0x000FF280,
8141 0x033, 0x00000057,
8142 0x03F, 0x00000200,
8143 0x033, 0x00000056,
8144 0x03F, 0x000001C0,
8145 0x033, 0x00000055,
8146 0x03F, 0x00000180,
8147 0x033, 0x00000054,
8148 0x03F, 0x00000040,
8149 0x93000004, 0x00000000, 0x40000000, 0x00000000,
8150 0x033, 0x0000005F,
8151 0x03F, 0x000773C0,
8152 0x033, 0x0000005E,
8153 0x03F, 0x000FF3C0,
8154 0x033, 0x0000005D,
8155 0x03F, 0x000773E8,
8156 0x033, 0x0000005C,
8157 0x03F, 0x000FF3E8,
8158 0x033, 0x0000005B,
8159 0x03F, 0x00000287,
8160 0x033, 0x0000005A,
8161 0x03F, 0x000002A8,
8162 0x033, 0x00000059,
8163 0x03F, 0x00000207,
8164 0x033, 0x00000058,
8165 0x03F, 0x000FF280,
8166 0x033, 0x00000057,
8167 0x03F, 0x00000200,
8168 0x033, 0x00000056,
8169 0x03F, 0x000001C0,
8170 0x033, 0x00000055,
8171 0x03F, 0x00000180,
8172 0x033, 0x00000054,
8173 0x03F, 0x00000040,
6821 0xA0000000, 0x00000000, 8174 0xA0000000, 0x00000000,
6822 0x033, 0x0000005F, 8175 0x033, 0x0000005F,
6823 0x03F, 0x000773E8, 8176 0x03F, 0x000773E8,
@@ -6858,6 +8211,10 @@ static const u32 rtw8822c_rf_b[] = {
6858 0x0EF, 0x00000000, 8211 0x0EF, 0x00000000,
6859 0x93000002, 0x00000000, 0x40000000, 0x00000000, 8212 0x93000002, 0x00000000, 0x40000000, 0x00000000,
6860 0x0EF, 0x00000000, 8213 0x0EF, 0x00000000,
8214 0x93000003, 0x00000000, 0x40000000, 0x00000000,
8215 0x0EF, 0x00000000,
8216 0x93000004, 0x00000000, 0x40000000, 0x00000000,
8217 0x0EF, 0x00000000,
6861 0xA0000000, 0x00000000, 8218 0xA0000000, 0x00000000,
6862 0x0EF, 0x00000000, 8219 0x0EF, 0x00000000,
6863 0xB0000000, 0x00000000, 8220 0xB0000000, 0x00000000,
@@ -7757,6 +9114,300 @@ static const u32 rtw8822c_rf_b[] = {
7757 0x03E, 0x00000000, 9114 0x03E, 0x00000000,
7758 0x03F, 0x0002C010, 9115 0x03F, 0x0002C010,
7759 0x0EF, 0x00000000, 9116 0x0EF, 0x00000000,
9117 0x93000003, 0x00000000, 0x40000000, 0x00000000,
9118 0x0EF, 0x00020000,
9119 0x033, 0x00000000,
9120 0x03E, 0x00001C86,
9121 0x03F, 0x00020000,
9122 0x033, 0x00000001,
9123 0x03E, 0x00001C02,
9124 0x03F, 0x00020000,
9125 0x033, 0x00000002,
9126 0x03E, 0x00000F02,
9127 0x03F, 0x00020000,
9128 0x033, 0x00000003,
9129 0x03E, 0x00000F00,
9130 0x03F, 0x00020000,
9131 0x033, 0x00000004,
9132 0x03E, 0x00000086,
9133 0x03F, 0x00020000,
9134 0x033, 0x00000005,
9135 0x03E, 0x00000002,
9136 0x03F, 0x00020000,
9137 0x033, 0x00000006,
9138 0x03E, 0x00000000,
9139 0x03F, 0x00020000,
9140 0x033, 0x00000007,
9141 0x03E, 0x00000000,
9142 0x03F, 0x0002F81C,
9143 0x033, 0x00000008,
9144 0x03E, 0x00001C86,
9145 0x03F, 0x00020000,
9146 0x033, 0x00000009,
9147 0x03E, 0x00001C02,
9148 0x03F, 0x00020000,
9149 0x033, 0x0000000A,
9150 0x03E, 0x00000F02,
9151 0x03F, 0x00020000,
9152 0x033, 0x0000000B,
9153 0x03E, 0x00000F00,
9154 0x03F, 0x00020000,
9155 0x033, 0x0000000C,
9156 0x03E, 0x00000086,
9157 0x03F, 0x00020000,
9158 0x033, 0x0000000D,
9159 0x03E, 0x00000002,
9160 0x03F, 0x00020000,
9161 0x033, 0x0000000E,
9162 0x03E, 0x00000000,
9163 0x03F, 0x00020000,
9164 0x033, 0x0000000F,
9165 0x03E, 0x00000000,
9166 0x03F, 0x0002F81C,
9167 0x033, 0x00000010,
9168 0x03E, 0x00001C86,
9169 0x03F, 0x00020000,
9170 0x033, 0x00000011,
9171 0x03E, 0x00001C02,
9172 0x03F, 0x00020000,
9173 0x033, 0x00000012,
9174 0x03E, 0x00000F02,
9175 0x03F, 0x00020000,
9176 0x033, 0x00000013,
9177 0x03E, 0x00000F00,
9178 0x03F, 0x00020000,
9179 0x033, 0x00000014,
9180 0x03E, 0x00000086,
9181 0x03F, 0x00020000,
9182 0x033, 0x00000015,
9183 0x03E, 0x00000002,
9184 0x03F, 0x00020000,
9185 0x033, 0x00000016,
9186 0x03E, 0x00000000,
9187 0x03F, 0x00020000,
9188 0x033, 0x00000017,
9189 0x03E, 0x00000000,
9190 0x03F, 0x0002C010,
9191 0x033, 0x00000018,
9192 0x03E, 0x00001C86,
9193 0x03F, 0x00020000,
9194 0x033, 0x00000019,
9195 0x03E, 0x00001C02,
9196 0x03F, 0x00020000,
9197 0x033, 0x0000001A,
9198 0x03E, 0x00000F02,
9199 0x03F, 0x00020000,
9200 0x033, 0x0000001B,
9201 0x03E, 0x00000F00,
9202 0x03F, 0x00020000,
9203 0x033, 0x0000001C,
9204 0x03E, 0x00000086,
9205 0x03F, 0x00020000,
9206 0x033, 0x0000001D,
9207 0x03E, 0x00000002,
9208 0x03F, 0x00020000,
9209 0x033, 0x0000001E,
9210 0x03E, 0x00000000,
9211 0x03F, 0x00020000,
9212 0x033, 0x0000001F,
9213 0x03E, 0x00000000,
9214 0x03F, 0x0002C010,
9215 0x033, 0x00000020,
9216 0x03E, 0x00001C86,
9217 0x03F, 0x00020000,
9218 0x033, 0x00000021,
9219 0x03E, 0x00001C02,
9220 0x03F, 0x00020000,
9221 0x033, 0x00000022,
9222 0x03E, 0x00000F02,
9223 0x03F, 0x00020000,
9224 0x033, 0x00000023,
9225 0x03E, 0x00000F00,
9226 0x03F, 0x00020000,
9227 0x033, 0x00000024,
9228 0x03E, 0x00000086,
9229 0x03F, 0x00020000,
9230 0x033, 0x00000025,
9231 0x03E, 0x00000002,
9232 0x03F, 0x00020000,
9233 0x033, 0x00000026,
9234 0x03E, 0x00000000,
9235 0x03F, 0x00020000,
9236 0x033, 0x00000027,
9237 0x03E, 0x00000000,
9238 0x03F, 0x0002C010,
9239 0x033, 0x00000028,
9240 0x03E, 0x00001C86,
9241 0x03F, 0x00020000,
9242 0x033, 0x00000029,
9243 0x03E, 0x00001C02,
9244 0x03F, 0x00020000,
9245 0x033, 0x0000002A,
9246 0x03E, 0x00000F02,
9247 0x03F, 0x00020000,
9248 0x033, 0x0000002B,
9249 0x03E, 0x00000F00,
9250 0x03F, 0x00020000,
9251 0x033, 0x0000002C,
9252 0x03E, 0x00000086,
9253 0x03F, 0x00020000,
9254 0x033, 0x0000002D,
9255 0x03E, 0x00000002,
9256 0x03F, 0x00020000,
9257 0x033, 0x0000002E,
9258 0x03E, 0x00000000,
9259 0x03F, 0x00020000,
9260 0x033, 0x0000002F,
9261 0x03E, 0x00000000,
9262 0x03F, 0x0002C010,
9263 0x0EF, 0x00000000,
9264 0x93000004, 0x00000000, 0x40000000, 0x00000000,
9265 0x0EF, 0x00020000,
9266 0x033, 0x00000000,
9267 0x03E, 0x00001C86,
9268 0x03F, 0x00020000,
9269 0x033, 0x00000001,
9270 0x03E, 0x00001C02,
9271 0x03F, 0x00020000,
9272 0x033, 0x00000002,
9273 0x03E, 0x00000F02,
9274 0x03F, 0x00020000,
9275 0x033, 0x00000003,
9276 0x03E, 0x00000F00,
9277 0x03F, 0x00020000,
9278 0x033, 0x00000004,
9279 0x03E, 0x00000086,
9280 0x03F, 0x00020000,
9281 0x033, 0x00000005,
9282 0x03E, 0x00000002,
9283 0x03F, 0x00020000,
9284 0x033, 0x00000006,
9285 0x03E, 0x00000000,
9286 0x03F, 0x00020000,
9287 0x033, 0x00000007,
9288 0x03E, 0x00000000,
9289 0x03F, 0x0002F81C,
9290 0x033, 0x00000008,
9291 0x03E, 0x00001C86,
9292 0x03F, 0x00020000,
9293 0x033, 0x00000009,
9294 0x03E, 0x00001C02,
9295 0x03F, 0x00020000,
9296 0x033, 0x0000000A,
9297 0x03E, 0x00000F02,
9298 0x03F, 0x00020000,
9299 0x033, 0x0000000B,
9300 0x03E, 0x00000F00,
9301 0x03F, 0x00020000,
9302 0x033, 0x0000000C,
9303 0x03E, 0x00000086,
9304 0x03F, 0x00020000,
9305 0x033, 0x0000000D,
9306 0x03E, 0x00000002,
9307 0x03F, 0x00020000,
9308 0x033, 0x0000000E,
9309 0x03E, 0x00000000,
9310 0x03F, 0x00020000,
9311 0x033, 0x0000000F,
9312 0x03E, 0x00000000,
9313 0x03F, 0x0002F81C,
9314 0x033, 0x00000010,
9315 0x03E, 0x00001C86,
9316 0x03F, 0x00020000,
9317 0x033, 0x00000011,
9318 0x03E, 0x00001C02,
9319 0x03F, 0x00020000,
9320 0x033, 0x00000012,
9321 0x03E, 0x00000F02,
9322 0x03F, 0x00020000,
9323 0x033, 0x00000013,
9324 0x03E, 0x00000F00,
9325 0x03F, 0x00020000,
9326 0x033, 0x00000014,
9327 0x03E, 0x00000086,
9328 0x03F, 0x00020000,
9329 0x033, 0x00000015,
9330 0x03E, 0x00000002,
9331 0x03F, 0x00020000,
9332 0x033, 0x00000016,
9333 0x03E, 0x00000000,
9334 0x03F, 0x00020000,
9335 0x033, 0x00000017,
9336 0x03E, 0x00000000,
9337 0x03F, 0x0002C010,
9338 0x033, 0x00000018,
9339 0x03E, 0x00001C86,
9340 0x03F, 0x00020000,
9341 0x033, 0x00000019,
9342 0x03E, 0x00001C02,
9343 0x03F, 0x00020000,
9344 0x033, 0x0000001A,
9345 0x03E, 0x00000F02,
9346 0x03F, 0x00020000,
9347 0x033, 0x0000001B,
9348 0x03E, 0x00000F00,
9349 0x03F, 0x00020000,
9350 0x033, 0x0000001C,
9351 0x03E, 0x00000086,
9352 0x03F, 0x00020000,
9353 0x033, 0x0000001D,
9354 0x03E, 0x00000002,
9355 0x03F, 0x00020000,
9356 0x033, 0x0000001E,
9357 0x03E, 0x00000000,
9358 0x03F, 0x00020000,
9359 0x033, 0x0000001F,
9360 0x03E, 0x00000000,
9361 0x03F, 0x0002C010,
9362 0x033, 0x00000020,
9363 0x03E, 0x00001C86,
9364 0x03F, 0x00020000,
9365 0x033, 0x00000021,
9366 0x03E, 0x00001C02,
9367 0x03F, 0x00020000,
9368 0x033, 0x00000022,
9369 0x03E, 0x00000F02,
9370 0x03F, 0x00020000,
9371 0x033, 0x00000023,
9372 0x03E, 0x00000F00,
9373 0x03F, 0x00020000,
9374 0x033, 0x00000024,
9375 0x03E, 0x00000086,
9376 0x03F, 0x00020000,
9377 0x033, 0x00000025,
9378 0x03E, 0x00000002,
9379 0x03F, 0x00020000,
9380 0x033, 0x00000026,
9381 0x03E, 0x00000000,
9382 0x03F, 0x00020000,
9383 0x033, 0x00000027,
9384 0x03E, 0x00000000,
9385 0x03F, 0x0002C010,
9386 0x033, 0x00000028,
9387 0x03E, 0x00001C86,
9388 0x03F, 0x00020000,
9389 0x033, 0x00000029,
9390 0x03E, 0x00001C02,
9391 0x03F, 0x00020000,
9392 0x033, 0x0000002A,
9393 0x03E, 0x00000F02,
9394 0x03F, 0x00020000,
9395 0x033, 0x0000002B,
9396 0x03E, 0x00000F00,
9397 0x03F, 0x00020000,
9398 0x033, 0x0000002C,
9399 0x03E, 0x00000086,
9400 0x03F, 0x00020000,
9401 0x033, 0x0000002D,
9402 0x03E, 0x00000002,
9403 0x03F, 0x00020000,
9404 0x033, 0x0000002E,
9405 0x03E, 0x00000000,
9406 0x03F, 0x00020000,
9407 0x033, 0x0000002F,
9408 0x03E, 0x00000000,
9409 0x03F, 0x0002C010,
9410 0x0EF, 0x00000000,
7760 0xA0000000, 0x00000000, 9411 0xA0000000, 0x00000000,
7761 0x0EF, 0x00020000, 9412 0x0EF, 0x00020000,
7762 0x033, 0x00000000, 9413 0x033, 0x00000000,
@@ -7921,6 +9572,10 @@ static const u32 rtw8822c_rf_b[] = {
7921 0x063, 0x00000002, 9572 0x063, 0x00000002,
7922 0x93000002, 0x00000000, 0x40000000, 0x00000000, 9573 0x93000002, 0x00000000, 0x40000000, 0x00000000,
7923 0x063, 0x00000002, 9574 0x063, 0x00000002,
9575 0x93000003, 0x00000000, 0x40000000, 0x00000000,
9576 0x063, 0x00000002,
9577 0x93000004, 0x00000000, 0x40000000, 0x00000000,
9578 0x063, 0x00000002,
7924 0xA0000000, 0x00000000, 9579 0xA0000000, 0x00000000,
7925 0x063, 0x00000C02, 9580 0x063, 0x00000C02,
7926 0xB0000000, 0x00000000, 9581 0xB0000000, 0x00000000,
@@ -8034,59 +9689,113 @@ static const u32 rtw8822c_rf_b[] = {
8034 0x030, 0x00018207, 9689 0x030, 0x00018207,
8035 0x030, 0x00019237, 9690 0x030, 0x00019237,
8036 0x93000001, 0x00000000, 0x40000000, 0x00000000, 9691 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8037 0x030, 0x00000237, 9692 0x030, 0x00000238,
8038 0x030, 0x00001237, 9693 0x030, 0x00001238,
8039 0x030, 0x00002237, 9694 0x030, 0x00002238,
8040 0x030, 0x00003237, 9695 0x030, 0x00003238,
8041 0x030, 0x00004207, 9696 0x030, 0x00004228,
8042 0x030, 0x00005237, 9697 0x030, 0x00005238,
8043 0x030, 0x00006237, 9698 0x030, 0x00006238,
8044 0x030, 0x00007237, 9699 0x030, 0x00007238,
8045 0x030, 0x00008207, 9700 0x030, 0x00008228,
8046 0x030, 0x00009237, 9701 0x030, 0x00009238,
8047 0x030, 0x0000A237, 9702 0x030, 0x0000A238,
8048 0x030, 0x0000B237, 9703 0x030, 0x0000B238,
8049 0x030, 0x0000C237, 9704 0x030, 0x0000C238,
8050 0x030, 0x0000D237, 9705 0x030, 0x0000D238,
8051 0x030, 0x0000E207, 9706 0x030, 0x0000E228,
8052 0x030, 0x0000F237, 9707 0x030, 0x0000F238,
8053 0x030, 0x00010237, 9708 0x030, 0x00010238,
8054 0x030, 0x00011237, 9709 0x030, 0x00011238,
8055 0x030, 0x00012207, 9710 0x030, 0x00012228,
8056 0x030, 0x00013237, 9711 0x030, 0x00013238,
8057 0x030, 0x00014237, 9712 0x030, 0x00014238,
8058 0x030, 0x00015237, 9713 0x030, 0x00015238,
8059 0x030, 0x00016207, 9714 0x030, 0x00016228,
8060 0x030, 0x00017237, 9715 0x030, 0x00017238,
8061 0x030, 0x00018207, 9716 0x030, 0x00018228,
8062 0x030, 0x00019237, 9717 0x030, 0x00019238,
8063 0x93000002, 0x00000000, 0x40000000, 0x00000000, 9718 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8064 0x030, 0x00000237, 9719 0x030, 0x00000238,
8065 0x030, 0x00001237, 9720 0x030, 0x00001238,
8066 0x030, 0x00002237, 9721 0x030, 0x00002238,
8067 0x030, 0x00003237, 9722 0x030, 0x00003238,
8068 0x030, 0x00004207, 9723 0x030, 0x00004228,
8069 0x030, 0x00005237, 9724 0x030, 0x00005238,
8070 0x030, 0x00006237, 9725 0x030, 0x00006238,
8071 0x030, 0x00007237, 9726 0x030, 0x00007238,
8072 0x030, 0x00008207, 9727 0x030, 0x00008228,
8073 0x030, 0x00009237, 9728 0x030, 0x00009238,
8074 0x030, 0x0000A237, 9729 0x030, 0x0000A238,
8075 0x030, 0x0000B237, 9730 0x030, 0x0000B238,
8076 0x030, 0x0000C237, 9731 0x030, 0x0000C238,
8077 0x030, 0x0000D237, 9732 0x030, 0x0000D238,
8078 0x030, 0x0000E207, 9733 0x030, 0x0000E228,
8079 0x030, 0x0000F237, 9734 0x030, 0x0000F238,
8080 0x030, 0x00010237, 9735 0x030, 0x00010238,
8081 0x030, 0x00011237, 9736 0x030, 0x00011238,
8082 0x030, 0x00012207, 9737 0x030, 0x00012228,
8083 0x030, 0x00013237, 9738 0x030, 0x00013238,
8084 0x030, 0x00014237, 9739 0x030, 0x00014238,
8085 0x030, 0x00015237, 9740 0x030, 0x00015238,
8086 0x030, 0x00016207, 9741 0x030, 0x00016228,
8087 0x030, 0x00017237, 9742 0x030, 0x00017238,
8088 0x030, 0x00018207, 9743 0x030, 0x00018228,
8089 0x030, 0x00019237, 9744 0x030, 0x00019238,
9745 0x93000003, 0x00000000, 0x40000000, 0x00000000,
9746 0x030, 0x00000239,
9747 0x030, 0x00001239,
9748 0x030, 0x00002239,
9749 0x030, 0x00003239,
9750 0x030, 0x00004239,
9751 0x030, 0x00005239,
9752 0x030, 0x00006239,
9753 0x030, 0x00007239,
9754 0x030, 0x00008239,
9755 0x030, 0x00009239,
9756 0x030, 0x0000A239,
9757 0x030, 0x0000B239,
9758 0x030, 0x0000C239,
9759 0x030, 0x0000D239,
9760 0x030, 0x0000E209,
9761 0x030, 0x0000F239,
9762 0x030, 0x00010239,
9763 0x030, 0x00011239,
9764 0x030, 0x00012209,
9765 0x030, 0x00013239,
9766 0x030, 0x00014239,
9767 0x030, 0x00015239,
9768 0x030, 0x00016209,
9769 0x030, 0x00017239,
9770 0x030, 0x00018209,
9771 0x030, 0x00019239,
9772 0x93000004, 0x00000000, 0x40000000, 0x00000000,
9773 0x030, 0x00000239,
9774 0x030, 0x00001239,
9775 0x030, 0x00002239,
9776 0x030, 0x00003239,
9777 0x030, 0x00004239,
9778 0x030, 0x00005239,
9779 0x030, 0x00006239,
9780 0x030, 0x00007239,
9781 0x030, 0x00008239,
9782 0x030, 0x00009239,
9783 0x030, 0x0000A239,
9784 0x030, 0x0000B239,
9785 0x030, 0x0000C239,
9786 0x030, 0x0000D239,
9787 0x030, 0x0000E209,
9788 0x030, 0x0000F239,
9789 0x030, 0x00010239,
9790 0x030, 0x00011239,
9791 0x030, 0x00012209,
9792 0x030, 0x00013239,
9793 0x030, 0x00014239,
9794 0x030, 0x00015239,
9795 0x030, 0x00016209,
9796 0x030, 0x00017239,
9797 0x030, 0x00018209,
9798 0x030, 0x00019239,
8090 0xA0000000, 0x00000000, 9799 0xA0000000, 0x00000000,
8091 0x030, 0x00000233, 9800 0x030, 0x00000233,
8092 0x030, 0x00001233, 9801 0x030, 0x00001233,
@@ -8195,6 +9904,32 @@ static const u32 rtw8822c_rf_b[] = {
8195 0x030, 0x00009334, 9904 0x030, 0x00009334,
8196 0x030, 0x0000A334, 9905 0x030, 0x0000A334,
8197 0x030, 0x0000B334, 9906 0x030, 0x0000B334,
9907 0x93000003, 0x00000000, 0x40000000, 0x00000000,
9908 0x030, 0x00000334,
9909 0x030, 0x00001334,
9910 0x030, 0x00002334,
9911 0x030, 0x00003334,
9912 0x030, 0x00004334,
9913 0x030, 0x00005334,
9914 0x030, 0x00006334,
9915 0x030, 0x00007334,
9916 0x030, 0x00008334,
9917 0x030, 0x00009334,
9918 0x030, 0x0000A334,
9919 0x030, 0x0000B334,
9920 0x93000004, 0x00000000, 0x40000000, 0x00000000,
9921 0x030, 0x00000334,
9922 0x030, 0x00001334,
9923 0x030, 0x00002334,
9924 0x030, 0x00003334,
9925 0x030, 0x00004334,
9926 0x030, 0x00005334,
9927 0x030, 0x00006334,
9928 0x030, 0x00007334,
9929 0x030, 0x00008334,
9930 0x030, 0x00009334,
9931 0x030, 0x0000A334,
9932 0x030, 0x0000B334,
8198 0xA0000000, 0x00000000, 9933 0xA0000000, 0x00000000,
8199 0x030, 0x00000232, 9934 0x030, 0x00000232,
8200 0x030, 0x00001232, 9935 0x030, 0x00001232,
@@ -8302,6 +10037,10 @@ static const u32 rtw8822c_rf_b[] = {
8302 0x052, 0x000902CA, 10037 0x052, 0x000902CA,
8303 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10038 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8304 0x052, 0x000902CA, 10039 0x052, 0x000902CA,
10040 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10041 0x052, 0x000902CA,
10042 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10043 0x052, 0x000902CA,
8305 0xA0000000, 0x00000000, 10044 0xA0000000, 0x00000000,
8306 0x052, 0x000942C0, 10045 0x052, 0x000942C0,
8307 0xB0000000, 0x00000000, 10046 0xB0000000, 0x00000000,
@@ -8310,7 +10049,17 @@ static const u32 rtw8822c_rf_b[] = {
8310 0x057, 0x0004C80A, 10049 0x057, 0x0004C80A,
8311 0x0EF, 0x00000020, 10050 0x0EF, 0x00000020,
8312 0x033, 0x00000000, 10051 0x033, 0x00000000,
10052 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10053 0x03E, 0x00000030,
10054 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10055 0x03E, 0x00000030,
10056 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10057 0x03E, 0x00000030,
10058 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10059 0x03E, 0x00000030,
10060 0xA0000000, 0x00000000,
8313 0x03E, 0x00000020, 10061 0x03E, 0x00000020,
10062 0xB0000000, 0x00000000,
8314 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10063 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8315 0x03F, 0x00024246, 10064 0x03F, 0x00024246,
8316 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10065 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8320,14 +10069,28 @@ static const u32 rtw8822c_rf_b[] = {
8320 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10069 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8321 0x03F, 0x00024246, 10070 0x03F, 0x00024246,
8322 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10071 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8323 0x03F, 0x00024246, 10072 0x03F, 0x000241C6,
8324 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10073 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8325 0x03F, 0x00024246, 10074 0x03F, 0x000241C6,
10075 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10076 0x03F, 0x000241C6,
10077 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10078 0x03F, 0x000241C6,
8326 0xA0000000, 0x00000000, 10079 0xA0000000, 0x00000000,
8327 0x03F, 0x0000C246, 10080 0x03F, 0x0000C246,
8328 0xB0000000, 0x00000000, 10081 0xB0000000, 0x00000000,
8329 0x033, 0x00000001, 10082 0x033, 0x00000001,
10083 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10084 0x03E, 0x00000030,
10085 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10086 0x03E, 0x00000030,
10087 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10088 0x03E, 0x00000030,
10089 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10090 0x03E, 0x00000030,
10091 0xA0000000, 0x00000000,
8330 0x03E, 0x00000020, 10092 0x03E, 0x00000020,
10093 0xB0000000, 0x00000000,
8331 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10094 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8332 0x03F, 0x00024246, 10095 0x03F, 0x00024246,
8333 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10096 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8337,9 +10100,13 @@ static const u32 rtw8822c_rf_b[] = {
8337 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10100 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8338 0x03F, 0x00024246, 10101 0x03F, 0x00024246,
8339 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10102 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8340 0x03F, 0x00024246, 10103 0x03F, 0x000241C6,
8341 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10104 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8342 0x03F, 0x00024246, 10105 0x03F, 0x000241C6,
10106 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10107 0x03F, 0x000241C6,
10108 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10109 0x03F, 0x000241C6,
8343 0xA0000000, 0x00000000, 10110 0xA0000000, 0x00000000,
8344 0x03F, 0x0000C246, 10111 0x03F, 0x0000C246,
8345 0xB0000000, 0x00000000, 10112 0xB0000000, 0x00000000,
@@ -8357,11 +10124,25 @@ static const u32 rtw8822c_rf_b[] = {
8357 0x03F, 0x0002C246, 10124 0x03F, 0x0002C246,
8358 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10125 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8359 0x03F, 0x0002C246, 10126 0x03F, 0x0002C246,
10127 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10128 0x03F, 0x0002C246,
10129 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10130 0x03F, 0x0002C246,
8360 0xA0000000, 0x00000000, 10131 0xA0000000, 0x00000000,
8361 0x03F, 0x0000C246, 10132 0x03F, 0x0000C246,
8362 0xB0000000, 0x00000000, 10133 0xB0000000, 0x00000000,
8363 0x033, 0x00000003, 10134 0x033, 0x00000003,
10135 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10136 0x03E, 0x00000030,
10137 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10138 0x03E, 0x00000030,
10139 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10140 0x03E, 0x00000030,
10141 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10142 0x03E, 0x00000030,
10143 0xA0000000, 0x00000000,
8364 0x03E, 0x00000020, 10144 0x03E, 0x00000020,
10145 0xB0000000, 0x00000000,
8365 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10146 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8366 0x03F, 0x00024246, 10147 0x03F, 0x00024246,
8367 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10148 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8371,14 +10152,28 @@ static const u32 rtw8822c_rf_b[] = {
8371 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10152 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8372 0x03F, 0x00024246, 10153 0x03F, 0x00024246,
8373 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10154 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8374 0x03F, 0x00024246, 10155 0x03F, 0x000241C6,
8375 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10156 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8376 0x03F, 0x00024246, 10157 0x03F, 0x000241C6,
10158 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10159 0x03F, 0x000241C6,
10160 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10161 0x03F, 0x000241C6,
8377 0xA0000000, 0x00000000, 10162 0xA0000000, 0x00000000,
8378 0x03F, 0x0000C246, 10163 0x03F, 0x0000C246,
8379 0xB0000000, 0x00000000, 10164 0xB0000000, 0x00000000,
8380 0x033, 0x00000004, 10165 0x033, 0x00000004,
10166 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10167 0x03E, 0x00000030,
10168 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10169 0x03E, 0x00000030,
10170 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10171 0x03E, 0x00000030,
10172 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10173 0x03E, 0x00000030,
10174 0xA0000000, 0x00000000,
8381 0x03E, 0x00000020, 10175 0x03E, 0x00000020,
10176 0xB0000000, 0x00000000,
8382 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10177 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8383 0x03F, 0x00024246, 10178 0x03F, 0x00024246,
8384 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10179 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8388,9 +10183,13 @@ static const u32 rtw8822c_rf_b[] = {
8388 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10183 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8389 0x03F, 0x00024246, 10184 0x03F, 0x00024246,
8390 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10185 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8391 0x03F, 0x00024246, 10186 0x03F, 0x000241C6,
8392 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10187 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8393 0x03F, 0x00024246, 10188 0x03F, 0x000241C6,
10189 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10190 0x03F, 0x000241C6,
10191 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10192 0x03F, 0x000241C6,
8394 0xA0000000, 0x00000000, 10193 0xA0000000, 0x00000000,
8395 0x03F, 0x0000C246, 10194 0x03F, 0x0000C246,
8396 0xB0000000, 0x00000000, 10195 0xB0000000, 0x00000000,
@@ -8408,11 +10207,25 @@ static const u32 rtw8822c_rf_b[] = {
8408 0x03F, 0x0002C246, 10207 0x03F, 0x0002C246,
8409 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10208 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8410 0x03F, 0x0002C246, 10209 0x03F, 0x0002C246,
10210 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10211 0x03F, 0x0002C246,
10212 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10213 0x03F, 0x0002C246,
8411 0xA0000000, 0x00000000, 10214 0xA0000000, 0x00000000,
8412 0x03F, 0x0000C246, 10215 0x03F, 0x0000C246,
8413 0xB0000000, 0x00000000, 10216 0xB0000000, 0x00000000,
8414 0x033, 0x00000006, 10217 0x033, 0x00000006,
10218 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10219 0x03E, 0x00000030,
10220 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10221 0x03E, 0x00000030,
10222 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10223 0x03E, 0x00000030,
10224 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10225 0x03E, 0x00000030,
10226 0xA0000000, 0x00000000,
8415 0x03E, 0x00000020, 10227 0x03E, 0x00000020,
10228 0xB0000000, 0x00000000,
8416 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10229 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8417 0x03F, 0x00024246, 10230 0x03F, 0x00024246,
8418 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10231 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8422,14 +10235,28 @@ static const u32 rtw8822c_rf_b[] = {
8422 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10235 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8423 0x03F, 0x00024246, 10236 0x03F, 0x00024246,
8424 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10237 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8425 0x03F, 0x00024246, 10238 0x03F, 0x000241C6,
8426 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10239 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8427 0x03F, 0x00024246, 10240 0x03F, 0x000241C6,
10241 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10242 0x03F, 0x000241C6,
10243 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10244 0x03F, 0x000241C6,
8428 0xA0000000, 0x00000000, 10245 0xA0000000, 0x00000000,
8429 0x03F, 0x0000C246, 10246 0x03F, 0x0000C246,
8430 0xB0000000, 0x00000000, 10247 0xB0000000, 0x00000000,
8431 0x033, 0x00000007, 10248 0x033, 0x00000007,
10249 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10250 0x03E, 0x00000030,
10251 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10252 0x03E, 0x00000030,
10253 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10254 0x03E, 0x00000030,
10255 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10256 0x03E, 0x00000030,
10257 0xA0000000, 0x00000000,
8432 0x03E, 0x00000020, 10258 0x03E, 0x00000020,
10259 0xB0000000, 0x00000000,
8433 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10260 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8434 0x03F, 0x00024246, 10261 0x03F, 0x00024246,
8435 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10262 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8439,9 +10266,13 @@ static const u32 rtw8822c_rf_b[] = {
8439 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10266 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8440 0x03F, 0x00024246, 10267 0x03F, 0x00024246,
8441 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10268 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8442 0x03F, 0x00024246, 10269 0x03F, 0x000241C6,
8443 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10270 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8444 0x03F, 0x00024246, 10271 0x03F, 0x000241C6,
10272 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10273 0x03F, 0x000241C6,
10274 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10275 0x03F, 0x000241C6,
8445 0xA0000000, 0x00000000, 10276 0xA0000000, 0x00000000,
8446 0x03F, 0x0000C246, 10277 0x03F, 0x0000C246,
8447 0xB0000000, 0x00000000, 10278 0xB0000000, 0x00000000,
@@ -8459,11 +10290,25 @@ static const u32 rtw8822c_rf_b[] = {
8459 0x03F, 0x0002C246, 10290 0x03F, 0x0002C246,
8460 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10291 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8461 0x03F, 0x0002C246, 10292 0x03F, 0x0002C246,
10293 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10294 0x03F, 0x0002C246,
10295 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10296 0x03F, 0x0002C246,
8462 0xA0000000, 0x00000000, 10297 0xA0000000, 0x00000000,
8463 0x03F, 0x0000C246, 10298 0x03F, 0x0000C246,
8464 0xB0000000, 0x00000000, 10299 0xB0000000, 0x00000000,
8465 0x033, 0x00000009, 10300 0x033, 0x00000009,
10301 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10302 0x03E, 0x00000030,
10303 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10304 0x03E, 0x00000030,
10305 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10306 0x03E, 0x00000030,
10307 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10308 0x03E, 0x00000030,
10309 0xA0000000, 0x00000000,
8466 0x03E, 0x00000020, 10310 0x03E, 0x00000020,
10311 0xB0000000, 0x00000000,
8467 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10312 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8468 0x03F, 0x00024246, 10313 0x03F, 0x00024246,
8469 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10314 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8473,14 +10318,28 @@ static const u32 rtw8822c_rf_b[] = {
8473 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10318 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8474 0x03F, 0x00024246, 10319 0x03F, 0x00024246,
8475 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10320 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8476 0x03F, 0x00024246, 10321 0x03F, 0x000241C6,
8477 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10322 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8478 0x03F, 0x00024246, 10323 0x03F, 0x000241C6,
10324 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10325 0x03F, 0x000241C6,
10326 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10327 0x03F, 0x000241C6,
8479 0xA0000000, 0x00000000, 10328 0xA0000000, 0x00000000,
8480 0x03F, 0x00008E46, 10329 0x03F, 0x00008E46,
8481 0xB0000000, 0x00000000, 10330 0xB0000000, 0x00000000,
8482 0x033, 0x0000000A, 10331 0x033, 0x0000000A,
10332 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10333 0x03E, 0x00000030,
10334 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10335 0x03E, 0x00000030,
10336 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10337 0x03E, 0x00000030,
10338 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10339 0x03E, 0x00000030,
10340 0xA0000000, 0x00000000,
8483 0x03E, 0x00000020, 10341 0x03E, 0x00000020,
10342 0xB0000000, 0x00000000,
8484 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10343 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8485 0x03F, 0x00024246, 10344 0x03F, 0x00024246,
8486 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10345 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8490,9 +10349,13 @@ static const u32 rtw8822c_rf_b[] = {
8490 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10349 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8491 0x03F, 0x00024246, 10350 0x03F, 0x00024246,
8492 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10351 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8493 0x03F, 0x00024246, 10352 0x03F, 0x000241C6,
8494 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10353 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8495 0x03F, 0x00024246, 10354 0x03F, 0x000241C6,
10355 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10356 0x03F, 0x000241C6,
10357 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10358 0x03F, 0x000241C6,
8496 0xA0000000, 0x00000000, 10359 0xA0000000, 0x00000000,
8497 0x03F, 0x00008E46, 10360 0x03F, 0x00008E46,
8498 0xB0000000, 0x00000000, 10361 0xB0000000, 0x00000000,
@@ -8510,11 +10373,25 @@ static const u32 rtw8822c_rf_b[] = {
8510 0x03F, 0x0002C246, 10373 0x03F, 0x0002C246,
8511 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10374 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8512 0x03F, 0x0002C246, 10375 0x03F, 0x0002C246,
10376 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10377 0x03F, 0x0002C246,
10378 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10379 0x03F, 0x0002C246,
8513 0xA0000000, 0x00000000, 10380 0xA0000000, 0x00000000,
8514 0x03F, 0x00008E46, 10381 0x03F, 0x00008E46,
8515 0xB0000000, 0x00000000, 10382 0xB0000000, 0x00000000,
8516 0x033, 0x0000000C, 10383 0x033, 0x0000000C,
10384 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10385 0x03E, 0x00000030,
10386 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10387 0x03E, 0x00000030,
10388 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10389 0x03E, 0x00000030,
10390 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10391 0x03E, 0x00000030,
10392 0xA0000000, 0x00000000,
8517 0x03E, 0x00000020, 10393 0x03E, 0x00000020,
10394 0xB0000000, 0x00000000,
8518 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10395 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8519 0x03F, 0x00024246, 10396 0x03F, 0x00024246,
8520 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10397 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8524,14 +10401,28 @@ static const u32 rtw8822c_rf_b[] = {
8524 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10401 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8525 0x03F, 0x00024246, 10402 0x03F, 0x00024246,
8526 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10403 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8527 0x03F, 0x00024246, 10404 0x03F, 0x000241C6,
8528 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10405 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8529 0x03F, 0x00024246, 10406 0x03F, 0x000241C6,
10407 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10408 0x03F, 0x000241C6,
10409 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10410 0x03F, 0x000241C6,
8530 0xA0000000, 0x00000000, 10411 0xA0000000, 0x00000000,
8531 0x03F, 0x00008E46, 10412 0x03F, 0x00008E46,
8532 0xB0000000, 0x00000000, 10413 0xB0000000, 0x00000000,
8533 0x033, 0x0000000D, 10414 0x033, 0x0000000D,
10415 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10416 0x03E, 0x00000030,
10417 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10418 0x03E, 0x00000030,
10419 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10420 0x03E, 0x00000030,
10421 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10422 0x03E, 0x00000030,
10423 0xA0000000, 0x00000000,
8534 0x03E, 0x00000020, 10424 0x03E, 0x00000020,
10425 0xB0000000, 0x00000000,
8535 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10426 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8536 0x03F, 0x00024246, 10427 0x03F, 0x00024246,
8537 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10428 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8541,9 +10432,13 @@ static const u32 rtw8822c_rf_b[] = {
8541 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10432 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8542 0x03F, 0x00024246, 10433 0x03F, 0x00024246,
8543 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10434 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8544 0x03F, 0x00024246, 10435 0x03F, 0x000241C6,
8545 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10436 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8546 0x03F, 0x00024246, 10437 0x03F, 0x000241C6,
10438 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10439 0x03F, 0x000241C6,
10440 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10441 0x03F, 0x000241C6,
8547 0xA0000000, 0x00000000, 10442 0xA0000000, 0x00000000,
8548 0x03F, 0x00008E46, 10443 0x03F, 0x00008E46,
8549 0xB0000000, 0x00000000, 10444 0xB0000000, 0x00000000,
@@ -8561,11 +10456,25 @@ static const u32 rtw8822c_rf_b[] = {
8561 0x03F, 0x0002C246, 10456 0x03F, 0x0002C246,
8562 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10457 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8563 0x03F, 0x0002C246, 10458 0x03F, 0x0002C246,
10459 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10460 0x03F, 0x0002C246,
10461 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10462 0x03F, 0x0002C246,
8564 0xA0000000, 0x00000000, 10463 0xA0000000, 0x00000000,
8565 0x03F, 0x00008E46, 10464 0x03F, 0x00008E46,
8566 0xB0000000, 0x00000000, 10465 0xB0000000, 0x00000000,
8567 0x033, 0x0000000F, 10466 0x033, 0x0000000F,
10467 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10468 0x03E, 0x00000030,
10469 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10470 0x03E, 0x00000030,
10471 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10472 0x03E, 0x00000030,
10473 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10474 0x03E, 0x00000030,
10475 0xA0000000, 0x00000000,
8568 0x03E, 0x00000020, 10476 0x03E, 0x00000020,
10477 0xB0000000, 0x00000000,
8569 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10478 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8570 0x03F, 0x00024246, 10479 0x03F, 0x00024246,
8571 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10480 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8575,14 +10484,28 @@ static const u32 rtw8822c_rf_b[] = {
8575 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10484 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8576 0x03F, 0x00024246, 10485 0x03F, 0x00024246,
8577 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10486 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8578 0x03F, 0x00024246, 10487 0x03F, 0x000241C6,
8579 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10488 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8580 0x03F, 0x00024246, 10489 0x03F, 0x000241C6,
10490 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10491 0x03F, 0x000241C6,
10492 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10493 0x03F, 0x000241C6,
8581 0xA0000000, 0x00000000, 10494 0xA0000000, 0x00000000,
8582 0x03F, 0x00008E46, 10495 0x03F, 0x00008E46,
8583 0xB0000000, 0x00000000, 10496 0xB0000000, 0x00000000,
8584 0x033, 0x00000010, 10497 0x033, 0x00000010,
10498 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10499 0x03E, 0x00000030,
10500 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10501 0x03E, 0x00000030,
10502 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10503 0x03E, 0x00000030,
10504 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10505 0x03E, 0x00000030,
10506 0xA0000000, 0x00000000,
8585 0x03E, 0x00000020, 10507 0x03E, 0x00000020,
10508 0xB0000000, 0x00000000,
8586 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10509 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8587 0x03F, 0x00024246, 10510 0x03F, 0x00024246,
8588 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10511 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8592,9 +10515,13 @@ static const u32 rtw8822c_rf_b[] = {
8592 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10515 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8593 0x03F, 0x00024246, 10516 0x03F, 0x00024246,
8594 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10517 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8595 0x03F, 0x00024246, 10518 0x03F, 0x000241C6,
8596 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10519 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8597 0x03F, 0x00024246, 10520 0x03F, 0x000241C6,
10521 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10522 0x03F, 0x000241C6,
10523 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10524 0x03F, 0x000241C6,
8598 0xA0000000, 0x00000000, 10525 0xA0000000, 0x00000000,
8599 0x03F, 0x00008E46, 10526 0x03F, 0x00008E46,
8600 0xB0000000, 0x00000000, 10527 0xB0000000, 0x00000000,
@@ -8612,11 +10539,25 @@ static const u32 rtw8822c_rf_b[] = {
8612 0x03F, 0x0002C246, 10539 0x03F, 0x0002C246,
8613 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10540 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8614 0x03F, 0x0002C246, 10541 0x03F, 0x0002C246,
10542 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10543 0x03F, 0x0002C246,
10544 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10545 0x03F, 0x0002C246,
8615 0xA0000000, 0x00000000, 10546 0xA0000000, 0x00000000,
8616 0x03F, 0x00008E46, 10547 0x03F, 0x00008E46,
8617 0xB0000000, 0x00000000, 10548 0xB0000000, 0x00000000,
8618 0x033, 0x00000012, 10549 0x033, 0x00000012,
10550 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10551 0x03E, 0x00000030,
10552 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10553 0x03E, 0x00000030,
10554 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10555 0x03E, 0x00000030,
10556 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10557 0x03E, 0x00000030,
10558 0xA0000000, 0x00000000,
8619 0x03E, 0x00000020, 10559 0x03E, 0x00000020,
10560 0xB0000000, 0x00000000,
8620 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10561 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8621 0x03F, 0x0001CA46, 10562 0x03F, 0x0001CA46,
8622 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10563 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8626,14 +10567,28 @@ static const u32 rtw8822c_rf_b[] = {
8626 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10567 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8627 0x03F, 0x0001CA46, 10568 0x03F, 0x0001CA46,
8628 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10569 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8629 0x03F, 0x0001CA46, 10570 0x03F, 0x000209C6,
8630 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10571 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8631 0x03F, 0x0001CA46, 10572 0x03F, 0x000209C6,
10573 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10574 0x03F, 0x000209C6,
10575 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10576 0x03F, 0x000209C6,
8632 0xA0000000, 0x00000000, 10577 0xA0000000, 0x00000000,
8633 0x03F, 0x00008E46, 10578 0x03F, 0x00008E46,
8634 0xB0000000, 0x00000000, 10579 0xB0000000, 0x00000000,
8635 0x033, 0x00000013, 10580 0x033, 0x00000013,
10581 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10582 0x03E, 0x00000030,
10583 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10584 0x03E, 0x00000030,
10585 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10586 0x03E, 0x00000030,
10587 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10588 0x03E, 0x00000030,
10589 0xA0000000, 0x00000000,
8636 0x03E, 0x00000020, 10590 0x03E, 0x00000020,
10591 0xB0000000, 0x00000000,
8637 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10592 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8638 0x03F, 0x0001CA46, 10593 0x03F, 0x0001CA46,
8639 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10594 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8643,9 +10598,13 @@ static const u32 rtw8822c_rf_b[] = {
8643 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10598 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8644 0x03F, 0x0001CA46, 10599 0x03F, 0x0001CA46,
8645 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10600 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8646 0x03F, 0x0001CA46, 10601 0x03F, 0x000209C6,
8647 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10602 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8648 0x03F, 0x0001CA46, 10603 0x03F, 0x000209C6,
10604 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10605 0x03F, 0x000209C6,
10606 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10607 0x03F, 0x000209C6,
8649 0xA0000000, 0x00000000, 10608 0xA0000000, 0x00000000,
8650 0x03F, 0x00008E46, 10609 0x03F, 0x00008E46,
8651 0xB0000000, 0x00000000, 10610 0xB0000000, 0x00000000,
@@ -8663,11 +10622,25 @@ static const u32 rtw8822c_rf_b[] = {
8663 0x03F, 0x0002CA46, 10622 0x03F, 0x0002CA46,
8664 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10623 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8665 0x03F, 0x0002CA46, 10624 0x03F, 0x0002CA46,
10625 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10626 0x03F, 0x0002CA46,
10627 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10628 0x03F, 0x0002CA46,
8666 0xA0000000, 0x00000000, 10629 0xA0000000, 0x00000000,
8667 0x03F, 0x00008E46, 10630 0x03F, 0x00008E46,
8668 0xB0000000, 0x00000000, 10631 0xB0000000, 0x00000000,
8669 0x033, 0x00000015, 10632 0x033, 0x00000015,
10633 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10634 0x03E, 0x00000030,
10635 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10636 0x03E, 0x00000030,
10637 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10638 0x03E, 0x00000030,
10639 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10640 0x03E, 0x00000030,
10641 0xA0000000, 0x00000000,
8670 0x03E, 0x00000020, 10642 0x03E, 0x00000020,
10643 0xB0000000, 0x00000000,
8671 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10644 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8672 0x03F, 0x0001CA46, 10645 0x03F, 0x0001CA46,
8673 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10646 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8677,14 +10650,28 @@ static const u32 rtw8822c_rf_b[] = {
8677 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10650 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8678 0x03F, 0x0001CA46, 10651 0x03F, 0x0001CA46,
8679 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10652 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8680 0x03F, 0x0001CA46, 10653 0x03F, 0x000209C6,
8681 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10654 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8682 0x03F, 0x0001CA46, 10655 0x03F, 0x000209C6,
10656 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10657 0x03F, 0x000209C6,
10658 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10659 0x03F, 0x000209C6,
8683 0xA0000000, 0x00000000, 10660 0xA0000000, 0x00000000,
8684 0x03F, 0x00008E46, 10661 0x03F, 0x00008E46,
8685 0xB0000000, 0x00000000, 10662 0xB0000000, 0x00000000,
8686 0x033, 0x00000016, 10663 0x033, 0x00000016,
10664 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10665 0x03E, 0x00000030,
10666 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10667 0x03E, 0x00000030,
10668 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10669 0x03E, 0x00000030,
10670 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10671 0x03E, 0x00000030,
10672 0xA0000000, 0x00000000,
8687 0x03E, 0x00000020, 10673 0x03E, 0x00000020,
10674 0xB0000000, 0x00000000,
8688 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10675 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8689 0x03F, 0x0001CA46, 10676 0x03F, 0x0001CA46,
8690 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10677 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8694,9 +10681,13 @@ static const u32 rtw8822c_rf_b[] = {
8694 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10681 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8695 0x03F, 0x0001CA46, 10682 0x03F, 0x0001CA46,
8696 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10683 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8697 0x03F, 0x0001CA46, 10684 0x03F, 0x000209C6,
8698 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10685 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8699 0x03F, 0x0001CA46, 10686 0x03F, 0x000209C6,
10687 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10688 0x03F, 0x000209C6,
10689 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10690 0x03F, 0x000209C6,
8700 0xA0000000, 0x00000000, 10691 0xA0000000, 0x00000000,
8701 0x03F, 0x00008E46, 10692 0x03F, 0x00008E46,
8702 0xB0000000, 0x00000000, 10693 0xB0000000, 0x00000000,
@@ -8714,11 +10705,25 @@ static const u32 rtw8822c_rf_b[] = {
8714 0x03F, 0x0002CA46, 10705 0x03F, 0x0002CA46,
8715 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10706 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8716 0x03F, 0x0002CA46, 10707 0x03F, 0x0002CA46,
10708 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10709 0x03F, 0x0002CA46,
10710 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10711 0x03F, 0x0002CA46,
8717 0xA0000000, 0x00000000, 10712 0xA0000000, 0x00000000,
8718 0x03F, 0x00008E46, 10713 0x03F, 0x00008E46,
8719 0xB0000000, 0x00000000, 10714 0xB0000000, 0x00000000,
8720 0x033, 0x00000018, 10715 0x033, 0x00000018,
10716 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10717 0x03E, 0x00000030,
10718 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10719 0x03E, 0x00000030,
10720 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10721 0x03E, 0x00000030,
10722 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10723 0x03E, 0x00000030,
10724 0xA0000000, 0x00000000,
8721 0x03E, 0x00000020, 10725 0x03E, 0x00000020,
10726 0xB0000000, 0x00000000,
8722 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10727 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8723 0x03F, 0x0001CA46, 10728 0x03F, 0x0001CA46,
8724 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10729 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8728,14 +10733,28 @@ static const u32 rtw8822c_rf_b[] = {
8728 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10733 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8729 0x03F, 0x0001CA46, 10734 0x03F, 0x0001CA46,
8730 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10735 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8731 0x03F, 0x0001CA46, 10736 0x03F, 0x000209C6,
8732 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10737 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8733 0x03F, 0x0001CA46, 10738 0x03F, 0x000209C6,
10739 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10740 0x03F, 0x000209C6,
10741 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10742 0x03F, 0x000209C6,
8734 0xA0000000, 0x00000000, 10743 0xA0000000, 0x00000000,
8735 0x03F, 0x00008E46, 10744 0x03F, 0x00008E46,
8736 0xB0000000, 0x00000000, 10745 0xB0000000, 0x00000000,
8737 0x033, 0x00000019, 10746 0x033, 0x00000019,
10747 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10748 0x03E, 0x00000030,
10749 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10750 0x03E, 0x00000030,
10751 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10752 0x03E, 0x00000030,
10753 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10754 0x03E, 0x00000030,
10755 0xA0000000, 0x00000000,
8738 0x03E, 0x00000020, 10756 0x03E, 0x00000020,
10757 0xB0000000, 0x00000000,
8739 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10758 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8740 0x03F, 0x0001CA46, 10759 0x03F, 0x0001CA46,
8741 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10760 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8745,9 +10764,13 @@ static const u32 rtw8822c_rf_b[] = {
8745 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10764 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8746 0x03F, 0x0001CA46, 10765 0x03F, 0x0001CA46,
8747 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10766 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8748 0x03F, 0x0001CA46, 10767 0x03F, 0x000209C6,
8749 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10768 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8750 0x03F, 0x0001CA46, 10769 0x03F, 0x000209C6,
10770 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10771 0x03F, 0x000209C6,
10772 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10773 0x03F, 0x000209C6,
8751 0xA0000000, 0x00000000, 10774 0xA0000000, 0x00000000,
8752 0x03F, 0x00008E46, 10775 0x03F, 0x00008E46,
8753 0xB0000000, 0x00000000, 10776 0xB0000000, 0x00000000,
@@ -8765,11 +10788,25 @@ static const u32 rtw8822c_rf_b[] = {
8765 0x03F, 0x0002CA46, 10788 0x03F, 0x0002CA46,
8766 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10789 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8767 0x03F, 0x0002CA46, 10790 0x03F, 0x0002CA46,
10791 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10792 0x03F, 0x0002CA46,
10793 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10794 0x03F, 0x0002CA46,
8768 0xA0000000, 0x00000000, 10795 0xA0000000, 0x00000000,
8769 0x03F, 0x00008E46, 10796 0x03F, 0x00008E46,
8770 0xB0000000, 0x00000000, 10797 0xB0000000, 0x00000000,
8771 0x033, 0x0000001B, 10798 0x033, 0x0000001B,
10799 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10800 0x03E, 0x00000030,
10801 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10802 0x03E, 0x00000030,
10803 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10804 0x03E, 0x00000030,
10805 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10806 0x03E, 0x00000030,
10807 0xA0000000, 0x00000000,
8772 0x03E, 0x00000020, 10808 0x03E, 0x00000020,
10809 0xB0000000, 0x00000000,
8773 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10810 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8774 0x03F, 0x0001CA46, 10811 0x03F, 0x0001CA46,
8775 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10812 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8779,14 +10816,28 @@ static const u32 rtw8822c_rf_b[] = {
8779 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10816 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8780 0x03F, 0x0001CA46, 10817 0x03F, 0x0001CA46,
8781 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10818 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8782 0x03F, 0x0001CA46, 10819 0x03F, 0x000209C6,
8783 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10820 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8784 0x03F, 0x0001CA46, 10821 0x03F, 0x000209C6,
10822 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10823 0x03F, 0x000209C6,
10824 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10825 0x03F, 0x000209C6,
8785 0xA0000000, 0x00000000, 10826 0xA0000000, 0x00000000,
8786 0x03F, 0x00008E46, 10827 0x03F, 0x00008E46,
8787 0xB0000000, 0x00000000, 10828 0xB0000000, 0x00000000,
8788 0x033, 0x0000001C, 10829 0x033, 0x0000001C,
10830 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10831 0x03E, 0x00000030,
10832 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10833 0x03E, 0x00000030,
10834 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10835 0x03E, 0x00000030,
10836 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10837 0x03E, 0x00000030,
10838 0xA0000000, 0x00000000,
8789 0x03E, 0x00000020, 10839 0x03E, 0x00000020,
10840 0xB0000000, 0x00000000,
8790 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10841 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8791 0x03F, 0x0001CA46, 10842 0x03F, 0x0001CA46,
8792 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10843 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8796,9 +10847,13 @@ static const u32 rtw8822c_rf_b[] = {
8796 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10847 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8797 0x03F, 0x0001CA46, 10848 0x03F, 0x0001CA46,
8798 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10849 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8799 0x03F, 0x0001CA46, 10850 0x03F, 0x000209C6,
8800 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10851 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8801 0x03F, 0x0001CA46, 10852 0x03F, 0x000209C6,
10853 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10854 0x03F, 0x000209C6,
10855 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10856 0x03F, 0x000209C6,
8802 0xA0000000, 0x00000000, 10857 0xA0000000, 0x00000000,
8803 0x03F, 0x00008E46, 10858 0x03F, 0x00008E46,
8804 0xB0000000, 0x00000000, 10859 0xB0000000, 0x00000000,
@@ -8816,11 +10871,25 @@ static const u32 rtw8822c_rf_b[] = {
8816 0x03F, 0x0002CA46, 10871 0x03F, 0x0002CA46,
8817 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10872 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8818 0x03F, 0x0002CA46, 10873 0x03F, 0x0002CA46,
10874 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10875 0x03F, 0x0002CA46,
10876 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10877 0x03F, 0x0002CA46,
8819 0xA0000000, 0x00000000, 10878 0xA0000000, 0x00000000,
8820 0x03F, 0x00008E46, 10879 0x03F, 0x00008E46,
8821 0xB0000000, 0x00000000, 10880 0xB0000000, 0x00000000,
8822 0x033, 0x0000001E, 10881 0x033, 0x0000001E,
10882 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10883 0x03E, 0x00000030,
10884 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10885 0x03E, 0x00000030,
10886 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10887 0x03E, 0x00000030,
10888 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10889 0x03E, 0x00000030,
10890 0xA0000000, 0x00000000,
8823 0x03E, 0x00000020, 10891 0x03E, 0x00000020,
10892 0xB0000000, 0x00000000,
8824 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10893 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8825 0x03F, 0x0001CA46, 10894 0x03F, 0x0001CA46,
8826 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10895 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8830,14 +10899,28 @@ static const u32 rtw8822c_rf_b[] = {
8830 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10899 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8831 0x03F, 0x0001CA46, 10900 0x03F, 0x0001CA46,
8832 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10901 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8833 0x03F, 0x0001CA46, 10902 0x03F, 0x000209C6,
8834 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10903 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8835 0x03F, 0x0001CA46, 10904 0x03F, 0x000209C6,
10905 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10906 0x03F, 0x000209C6,
10907 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10908 0x03F, 0x000209C6,
8836 0xA0000000, 0x00000000, 10909 0xA0000000, 0x00000000,
8837 0x03F, 0x00008E46, 10910 0x03F, 0x00008E46,
8838 0xB0000000, 0x00000000, 10911 0xB0000000, 0x00000000,
8839 0x033, 0x0000001F, 10912 0x033, 0x0000001F,
10913 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10914 0x03E, 0x00000030,
10915 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10916 0x03E, 0x00000030,
10917 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10918 0x03E, 0x00000030,
10919 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10920 0x03E, 0x00000030,
10921 0xA0000000, 0x00000000,
8840 0x03E, 0x00000020, 10922 0x03E, 0x00000020,
10923 0xB0000000, 0x00000000,
8841 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10924 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8842 0x03F, 0x0001CA46, 10925 0x03F, 0x0001CA46,
8843 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10926 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8847,9 +10930,13 @@ static const u32 rtw8822c_rf_b[] = {
8847 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10930 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8848 0x03F, 0x0001CA46, 10931 0x03F, 0x0001CA46,
8849 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10932 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8850 0x03F, 0x0001CA46, 10933 0x03F, 0x000209C6,
8851 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10934 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8852 0x03F, 0x0001CA46, 10935 0x03F, 0x000209C6,
10936 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10937 0x03F, 0x000209C6,
10938 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10939 0x03F, 0x000209C6,
8853 0xA0000000, 0x00000000, 10940 0xA0000000, 0x00000000,
8854 0x03F, 0x00008E46, 10941 0x03F, 0x00008E46,
8855 0xB0000000, 0x00000000, 10942 0xB0000000, 0x00000000,
@@ -8867,11 +10954,25 @@ static const u32 rtw8822c_rf_b[] = {
8867 0x03F, 0x0002CA46, 10954 0x03F, 0x0002CA46,
8868 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10955 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8869 0x03F, 0x0002CA46, 10956 0x03F, 0x0002CA46,
10957 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10958 0x03F, 0x0002CA46,
10959 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10960 0x03F, 0x0002CA46,
8870 0xA0000000, 0x00000000, 10961 0xA0000000, 0x00000000,
8871 0x03F, 0x00008E46, 10962 0x03F, 0x00008E46,
8872 0xB0000000, 0x00000000, 10963 0xB0000000, 0x00000000,
8873 0x033, 0x00000021, 10964 0x033, 0x00000021,
10965 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10966 0x03E, 0x00000030,
10967 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10968 0x03E, 0x00000030,
10969 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10970 0x03E, 0x00000030,
10971 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10972 0x03E, 0x00000030,
10973 0xA0000000, 0x00000000,
8874 0x03E, 0x00000020, 10974 0x03E, 0x00000020,
10975 0xB0000000, 0x00000000,
8875 0x81000001, 0x00000000, 0x40000000, 0x00000000, 10976 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8876 0x03F, 0x0001CA46, 10977 0x03F, 0x0001CA46,
8877 0x91000002, 0x00000000, 0x40000000, 0x00000000, 10978 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8881,14 +10982,28 @@ static const u32 rtw8822c_rf_b[] = {
8881 0x92000002, 0x00000000, 0x40000000, 0x00000000, 10982 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8882 0x03F, 0x0001CA46, 10983 0x03F, 0x0001CA46,
8883 0x93000001, 0x00000000, 0x40000000, 0x00000000, 10984 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8884 0x03F, 0x0001CA46, 10985 0x03F, 0x000209C6,
8885 0x93000002, 0x00000000, 0x40000000, 0x00000000, 10986 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8886 0x03F, 0x0001CA46, 10987 0x03F, 0x000209C6,
10988 0x93000003, 0x00000000, 0x40000000, 0x00000000,
10989 0x03F, 0x000209C6,
10990 0x93000004, 0x00000000, 0x40000000, 0x00000000,
10991 0x03F, 0x000209C6,
8887 0xA0000000, 0x00000000, 10992 0xA0000000, 0x00000000,
8888 0x03F, 0x00008E46, 10993 0x03F, 0x00008E46,
8889 0xB0000000, 0x00000000, 10994 0xB0000000, 0x00000000,
8890 0x033, 0x00000022, 10995 0x033, 0x00000022,
10996 0x83000001, 0x00000000, 0x40000000, 0x00000000,
10997 0x03E, 0x00000030,
10998 0x93000002, 0x00000000, 0x40000000, 0x00000000,
10999 0x03E, 0x00000030,
11000 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11001 0x03E, 0x00000030,
11002 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11003 0x03E, 0x00000030,
11004 0xA0000000, 0x00000000,
8891 0x03E, 0x00000020, 11005 0x03E, 0x00000020,
11006 0xB0000000, 0x00000000,
8892 0x81000001, 0x00000000, 0x40000000, 0x00000000, 11007 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8893 0x03F, 0x0001CA46, 11008 0x03F, 0x0001CA46,
8894 0x91000002, 0x00000000, 0x40000000, 0x00000000, 11009 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8898,14 +11013,28 @@ static const u32 rtw8822c_rf_b[] = {
8898 0x92000002, 0x00000000, 0x40000000, 0x00000000, 11013 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8899 0x03F, 0x0001CA46, 11014 0x03F, 0x0001CA46,
8900 0x93000001, 0x00000000, 0x40000000, 0x00000000, 11015 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8901 0x03F, 0x0001CA46, 11016 0x03F, 0x000209C6,
8902 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11017 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8903 0x03F, 0x0001CA46, 11018 0x03F, 0x000209C6,
11019 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11020 0x03F, 0x000209C6,
11021 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11022 0x03F, 0x000209C6,
8904 0xA0000000, 0x00000000, 11023 0xA0000000, 0x00000000,
8905 0x03F, 0x00008E46, 11024 0x03F, 0x00008E46,
8906 0xB0000000, 0x00000000, 11025 0xB0000000, 0x00000000,
8907 0x033, 0x00000023, 11026 0x033, 0x00000023,
11027 0x83000001, 0x00000000, 0x40000000, 0x00000000,
11028 0x03E, 0x00000020,
11029 0x93000002, 0x00000000, 0x40000000, 0x00000000,
11030 0x03E, 0x00000020,
11031 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11032 0x03E, 0x00000020,
11033 0x93000004, 0x00000000, 0x40000000, 0x00000000,
8908 0x03E, 0x00000020, 11034 0x03E, 0x00000020,
11035 0xA0000000, 0x00000000,
11036 0x03E, 0x00000020,
11037 0xB0000000, 0x00000000,
8909 0x81000001, 0x00000000, 0x40000000, 0x00000000, 11038 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8910 0x03F, 0x0001CA46, 11039 0x03F, 0x0001CA46,
8911 0x91000002, 0x00000000, 0x40000000, 0x00000000, 11040 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8918,11 +11047,25 @@ static const u32 rtw8822c_rf_b[] = {
8918 0x03F, 0x0002CA46, 11047 0x03F, 0x0002CA46,
8919 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11048 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8920 0x03F, 0x0002CA46, 11049 0x03F, 0x0002CA46,
11050 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11051 0x03F, 0x0002CA46,
11052 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11053 0x03F, 0x0002CA46,
8921 0xA0000000, 0x00000000, 11054 0xA0000000, 0x00000000,
8922 0x03F, 0x00008E46, 11055 0x03F, 0x00008E46,
8923 0xB0000000, 0x00000000, 11056 0xB0000000, 0x00000000,
8924 0x033, 0x00000024, 11057 0x033, 0x00000024,
11058 0x83000001, 0x00000000, 0x40000000, 0x00000000,
11059 0x03E, 0x00000030,
11060 0x93000002, 0x00000000, 0x40000000, 0x00000000,
11061 0x03E, 0x00000030,
11062 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11063 0x03E, 0x00000030,
11064 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11065 0x03E, 0x00000030,
11066 0xA0000000, 0x00000000,
8925 0x03E, 0x00000020, 11067 0x03E, 0x00000020,
11068 0xB0000000, 0x00000000,
8926 0x81000001, 0x00000000, 0x40000000, 0x00000000, 11069 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8927 0x03F, 0x0001CA46, 11070 0x03F, 0x0001CA46,
8928 0x91000002, 0x00000000, 0x40000000, 0x00000000, 11071 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8932,14 +11075,28 @@ static const u32 rtw8822c_rf_b[] = {
8932 0x92000002, 0x00000000, 0x40000000, 0x00000000, 11075 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8933 0x03F, 0x0001CA46, 11076 0x03F, 0x0001CA46,
8934 0x93000001, 0x00000000, 0x40000000, 0x00000000, 11077 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8935 0x03F, 0x0001CA46, 11078 0x03F, 0x000209C6,
8936 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11079 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8937 0x03F, 0x0001CA46, 11080 0x03F, 0x000209C6,
11081 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11082 0x03F, 0x000209C6,
11083 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11084 0x03F, 0x000209C6,
8938 0xA0000000, 0x00000000, 11085 0xA0000000, 0x00000000,
8939 0x03F, 0x00008E46, 11086 0x03F, 0x00008E46,
8940 0xB0000000, 0x00000000, 11087 0xB0000000, 0x00000000,
8941 0x033, 0x00000025, 11088 0x033, 0x00000025,
11089 0x83000001, 0x00000000, 0x40000000, 0x00000000,
11090 0x03E, 0x00000030,
11091 0x93000002, 0x00000000, 0x40000000, 0x00000000,
11092 0x03E, 0x00000030,
11093 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11094 0x03E, 0x00000030,
11095 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11096 0x03E, 0x00000030,
11097 0xA0000000, 0x00000000,
8942 0x03E, 0x00000020, 11098 0x03E, 0x00000020,
11099 0xB0000000, 0x00000000,
8943 0x81000001, 0x00000000, 0x40000000, 0x00000000, 11100 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8944 0x03F, 0x0001CA46, 11101 0x03F, 0x0001CA46,
8945 0x91000002, 0x00000000, 0x40000000, 0x00000000, 11102 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8949,9 +11106,13 @@ static const u32 rtw8822c_rf_b[] = {
8949 0x92000002, 0x00000000, 0x40000000, 0x00000000, 11106 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8950 0x03F, 0x0001CA46, 11107 0x03F, 0x0001CA46,
8951 0x93000001, 0x00000000, 0x40000000, 0x00000000, 11108 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8952 0x03F, 0x0001CA46, 11109 0x03F, 0x000209C6,
8953 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11110 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8954 0x03F, 0x0001CA46, 11111 0x03F, 0x000209C6,
11112 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11113 0x03F, 0x000209C6,
11114 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11115 0x03F, 0x000209C6,
8955 0xA0000000, 0x00000000, 11116 0xA0000000, 0x00000000,
8956 0x03F, 0x00008E46, 11117 0x03F, 0x00008E46,
8957 0xB0000000, 0x00000000, 11118 0xB0000000, 0x00000000,
@@ -8969,11 +11130,25 @@ static const u32 rtw8822c_rf_b[] = {
8969 0x03F, 0x0002CA46, 11130 0x03F, 0x0002CA46,
8970 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11131 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8971 0x03F, 0x0002CA46, 11132 0x03F, 0x0002CA46,
11133 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11134 0x03F, 0x0002CA46,
11135 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11136 0x03F, 0x0002CA46,
8972 0xA0000000, 0x00000000, 11137 0xA0000000, 0x00000000,
8973 0x03F, 0x00008E46, 11138 0x03F, 0x00008E46,
8974 0xB0000000, 0x00000000, 11139 0xB0000000, 0x00000000,
8975 0x033, 0x00000027, 11140 0x033, 0x00000027,
11141 0x83000001, 0x00000000, 0x40000000, 0x00000000,
11142 0x03E, 0x00000030,
11143 0x93000002, 0x00000000, 0x40000000, 0x00000000,
11144 0x03E, 0x00000030,
11145 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11146 0x03E, 0x00000030,
11147 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11148 0x03E, 0x00000030,
11149 0xA0000000, 0x00000000,
8976 0x03E, 0x00000020, 11150 0x03E, 0x00000020,
11151 0xB0000000, 0x00000000,
8977 0x81000001, 0x00000000, 0x40000000, 0x00000000, 11152 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8978 0x03F, 0x0001CA46, 11153 0x03F, 0x0001CA46,
8979 0x91000002, 0x00000000, 0x40000000, 0x00000000, 11154 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -8983,14 +11158,28 @@ static const u32 rtw8822c_rf_b[] = {
8983 0x92000002, 0x00000000, 0x40000000, 0x00000000, 11158 0x92000002, 0x00000000, 0x40000000, 0x00000000,
8984 0x03F, 0x0001CA46, 11159 0x03F, 0x0001CA46,
8985 0x93000001, 0x00000000, 0x40000000, 0x00000000, 11160 0x93000001, 0x00000000, 0x40000000, 0x00000000,
8986 0x03F, 0x0001CA46, 11161 0x03F, 0x000209C6,
8987 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11162 0x93000002, 0x00000000, 0x40000000, 0x00000000,
8988 0x03F, 0x0001CA46, 11163 0x03F, 0x000209C6,
11164 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11165 0x03F, 0x000209C6,
11166 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11167 0x03F, 0x000209C6,
8989 0xA0000000, 0x00000000, 11168 0xA0000000, 0x00000000,
8990 0x03F, 0x00008E46, 11169 0x03F, 0x00008E46,
8991 0xB0000000, 0x00000000, 11170 0xB0000000, 0x00000000,
8992 0x033, 0x00000028, 11171 0x033, 0x00000028,
11172 0x83000001, 0x00000000, 0x40000000, 0x00000000,
11173 0x03E, 0x00000030,
11174 0x93000002, 0x00000000, 0x40000000, 0x00000000,
11175 0x03E, 0x00000030,
11176 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11177 0x03E, 0x00000030,
11178 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11179 0x03E, 0x00000030,
11180 0xA0000000, 0x00000000,
8993 0x03E, 0x00000020, 11181 0x03E, 0x00000020,
11182 0xB0000000, 0x00000000,
8994 0x81000001, 0x00000000, 0x40000000, 0x00000000, 11183 0x81000001, 0x00000000, 0x40000000, 0x00000000,
8995 0x03F, 0x0001CA46, 11184 0x03F, 0x0001CA46,
8996 0x91000002, 0x00000000, 0x40000000, 0x00000000, 11185 0x91000002, 0x00000000, 0x40000000, 0x00000000,
@@ -9000,9 +11189,13 @@ static const u32 rtw8822c_rf_b[] = {
9000 0x92000002, 0x00000000, 0x40000000, 0x00000000, 11189 0x92000002, 0x00000000, 0x40000000, 0x00000000,
9001 0x03F, 0x0001CA46, 11190 0x03F, 0x0001CA46,
9002 0x93000001, 0x00000000, 0x40000000, 0x00000000, 11191 0x93000001, 0x00000000, 0x40000000, 0x00000000,
9003 0x03F, 0x0001CA46, 11192 0x03F, 0x000209C6,
9004 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11193 0x93000002, 0x00000000, 0x40000000, 0x00000000,
9005 0x03F, 0x0001CA46, 11194 0x03F, 0x000209C6,
11195 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11196 0x03F, 0x000209C6,
11197 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11198 0x03F, 0x000209C6,
9006 0xA0000000, 0x00000000, 11199 0xA0000000, 0x00000000,
9007 0x03F, 0x00008E46, 11200 0x03F, 0x00008E46,
9008 0xB0000000, 0x00000000, 11201 0xB0000000, 0x00000000,
@@ -9020,6 +11213,10 @@ static const u32 rtw8822c_rf_b[] = {
9020 0x03F, 0x0002CA46, 11213 0x03F, 0x0002CA46,
9021 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11214 0x93000002, 0x00000000, 0x40000000, 0x00000000,
9022 0x03F, 0x0002CA46, 11215 0x03F, 0x0002CA46,
11216 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11217 0x03F, 0x0002CA46,
11218 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11219 0x03F, 0x0002CA46,
9023 0xA0000000, 0x00000000, 11220 0xA0000000, 0x00000000,
9024 0x03F, 0x00008E46, 11221 0x03F, 0x00008E46,
9025 0xB0000000, 0x00000000, 11222 0xB0000000, 0x00000000,
@@ -9037,6 +11234,10 @@ static const u32 rtw8822c_rf_b[] = {
9037 0x03F, 0x0001CA46, 11234 0x03F, 0x0001CA46,
9038 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11235 0x93000002, 0x00000000, 0x40000000, 0x00000000,
9039 0x03F, 0x0001CA46, 11236 0x03F, 0x0001CA46,
11237 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11238 0x03F, 0x0001CA46,
11239 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11240 0x03F, 0x0001CA46,
9040 0xA0000000, 0x00000000, 11241 0xA0000000, 0x00000000,
9041 0x03F, 0x00008E46, 11242 0x03F, 0x00008E46,
9042 0xB0000000, 0x00000000, 11243 0xB0000000, 0x00000000,
@@ -9136,17 +11337,17 @@ static const u32 rtw8822c_rf_b[] = {
9136 0x03F, 0x00000DF7, 11337 0x03F, 0x00000DF7,
9137 0x93000001, 0x00000000, 0x40000000, 0x00000000, 11338 0x93000001, 0x00000000, 0x40000000, 0x00000000,
9138 0x033, 0x00000060, 11339 0x033, 0x00000060,
9139 0x03F, 0x00000468, 11340 0x03F, 0x00000467,
9140 0x033, 0x00000061, 11341 0x033, 0x00000061,
9141 0x03F, 0x00000868, 11342 0x03F, 0x00000867,
9142 0x033, 0x00000062, 11343 0x033, 0x00000062,
9143 0x03F, 0x00000909, 11344 0x03F, 0x00000908,
9144 0x033, 0x00000063, 11345 0x033, 0x00000063,
9145 0x03F, 0x00000D0A, 11346 0x03F, 0x00000D09,
9146 0x033, 0x00000064, 11347 0x033, 0x00000064,
9147 0x03F, 0x00000D4A, 11348 0x03F, 0x00000D49,
9148 0x033, 0x00000065, 11349 0x033, 0x00000065,
9149 0x03F, 0x00000D8B, 11350 0x03F, 0x00000D8A,
9150 0x033, 0x00000066, 11351 0x033, 0x00000066,
9151 0x03F, 0x00000DEB, 11352 0x03F, 0x00000DEB,
9152 0x033, 0x00000067, 11353 0x033, 0x00000067,
@@ -9159,17 +11360,63 @@ static const u32 rtw8822c_rf_b[] = {
9159 0x03F, 0x00000DF7, 11360 0x03F, 0x00000DF7,
9160 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11361 0x93000002, 0x00000000, 0x40000000, 0x00000000,
9161 0x033, 0x00000060, 11362 0x033, 0x00000060,
9162 0x03F, 0x00000468, 11363 0x03F, 0x00000467,
9163 0x033, 0x00000061, 11364 0x033, 0x00000061,
9164 0x03F, 0x00000868, 11365 0x03F, 0x00000867,
9165 0x033, 0x00000062, 11366 0x033, 0x00000062,
9166 0x03F, 0x00000909, 11367 0x03F, 0x00000908,
9167 0x033, 0x00000063, 11368 0x033, 0x00000063,
9168 0x03F, 0x00000D0A, 11369 0x03F, 0x00000D09,
9169 0x033, 0x00000064, 11370 0x033, 0x00000064,
9170 0x03F, 0x00000D4A, 11371 0x03F, 0x00000D49,
9171 0x033, 0x00000065, 11372 0x033, 0x00000065,
9172 0x03F, 0x00000D8B, 11373 0x03F, 0x00000D8A,
11374 0x033, 0x00000066,
11375 0x03F, 0x00000DEB,
11376 0x033, 0x00000067,
11377 0x03F, 0x00000DEE,
11378 0x033, 0x00000068,
11379 0x03F, 0x00000DF1,
11380 0x033, 0x00000069,
11381 0x03F, 0x00000DF4,
11382 0x033, 0x0000006A,
11383 0x03F, 0x00000DF7,
11384 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11385 0x033, 0x00000060,
11386 0x03F, 0x00000467,
11387 0x033, 0x00000061,
11388 0x03F, 0x00000867,
11389 0x033, 0x00000062,
11390 0x03F, 0x00000908,
11391 0x033, 0x00000063,
11392 0x03F, 0x00000D09,
11393 0x033, 0x00000064,
11394 0x03F, 0x00000D49,
11395 0x033, 0x00000065,
11396 0x03F, 0x00000D8A,
11397 0x033, 0x00000066,
11398 0x03F, 0x00000DEB,
11399 0x033, 0x00000067,
11400 0x03F, 0x00000DEE,
11401 0x033, 0x00000068,
11402 0x03F, 0x00000DF1,
11403 0x033, 0x00000069,
11404 0x03F, 0x00000DF4,
11405 0x033, 0x0000006A,
11406 0x03F, 0x00000DF7,
11407 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11408 0x033, 0x00000060,
11409 0x03F, 0x00000467,
11410 0x033, 0x00000061,
11411 0x03F, 0x00000867,
11412 0x033, 0x00000062,
11413 0x03F, 0x00000908,
11414 0x033, 0x00000063,
11415 0x03F, 0x00000D09,
11416 0x033, 0x00000064,
11417 0x03F, 0x00000D49,
11418 0x033, 0x00000065,
11419 0x03F, 0x00000D8A,
9173 0x033, 0x00000066, 11420 0x033, 0x00000066,
9174 0x03F, 0x00000DEB, 11421 0x03F, 0x00000DEB,
9175 0x033, 0x00000067, 11422 0x033, 0x00000067,
@@ -9298,17 +11545,17 @@ static const u32 rtw8822c_rf_b[] = {
9298 0x03F, 0x00000DF7, 11545 0x03F, 0x00000DF7,
9299 0x93000001, 0x00000000, 0x40000000, 0x00000000, 11546 0x93000001, 0x00000000, 0x40000000, 0x00000000,
9300 0x033, 0x00000020, 11547 0x033, 0x00000020,
9301 0x03F, 0x00000468, 11548 0x03F, 0x00000467,
9302 0x033, 0x00000021, 11549 0x033, 0x00000021,
9303 0x03F, 0x00000868, 11550 0x03F, 0x00000867,
9304 0x033, 0x00000022, 11551 0x033, 0x00000022,
9305 0x03F, 0x00000909, 11552 0x03F, 0x00000908,
9306 0x033, 0x00000023, 11553 0x033, 0x00000023,
9307 0x03F, 0x00000D0A, 11554 0x03F, 0x00000D09,
9308 0x033, 0x00000024, 11555 0x033, 0x00000024,
9309 0x03F, 0x00000D4A, 11556 0x03F, 0x00000D49,
9310 0x033, 0x00000025, 11557 0x033, 0x00000025,
9311 0x03F, 0x00000D8B, 11558 0x03F, 0x00000D8A,
9312 0x033, 0x00000026, 11559 0x033, 0x00000026,
9313 0x03F, 0x00000DEB, 11560 0x03F, 0x00000DEB,
9314 0x033, 0x00000027, 11561 0x033, 0x00000027,
@@ -9321,17 +11568,63 @@ static const u32 rtw8822c_rf_b[] = {
9321 0x03F, 0x00000DF7, 11568 0x03F, 0x00000DF7,
9322 0x93000002, 0x00000000, 0x40000000, 0x00000000, 11569 0x93000002, 0x00000000, 0x40000000, 0x00000000,
9323 0x033, 0x00000020, 11570 0x033, 0x00000020,
9324 0x03F, 0x00000468, 11571 0x03F, 0x00000467,
9325 0x033, 0x00000021, 11572 0x033, 0x00000021,
9326 0x03F, 0x00000868, 11573 0x03F, 0x00000867,
9327 0x033, 0x00000022, 11574 0x033, 0x00000022,
9328 0x03F, 0x00000909, 11575 0x03F, 0x00000908,
9329 0x033, 0x00000023, 11576 0x033, 0x00000023,
9330 0x03F, 0x00000D0A, 11577 0x03F, 0x00000D09,
9331 0x033, 0x00000024, 11578 0x033, 0x00000024,
9332 0x03F, 0x00000D4A, 11579 0x03F, 0x00000D49,
9333 0x033, 0x00000025, 11580 0x033, 0x00000025,
9334 0x03F, 0x00000D8B, 11581 0x03F, 0x00000D8A,
11582 0x033, 0x00000026,
11583 0x03F, 0x00000DEB,
11584 0x033, 0x00000027,
11585 0x03F, 0x00000DEE,
11586 0x033, 0x00000028,
11587 0x03F, 0x00000DF1,
11588 0x033, 0x00000029,
11589 0x03F, 0x00000DF4,
11590 0x033, 0x0000002A,
11591 0x03F, 0x00000DF7,
11592 0x93000003, 0x00000000, 0x40000000, 0x00000000,
11593 0x033, 0x00000020,
11594 0x03F, 0x00000467,
11595 0x033, 0x00000021,
11596 0x03F, 0x00000867,
11597 0x033, 0x00000022,
11598 0x03F, 0x00000908,
11599 0x033, 0x00000023,
11600 0x03F, 0x00000D09,
11601 0x033, 0x00000024,
11602 0x03F, 0x00000D49,
11603 0x033, 0x00000025,
11604 0x03F, 0x00000D8A,
11605 0x033, 0x00000026,
11606 0x03F, 0x00000DEB,
11607 0x033, 0x00000027,
11608 0x03F, 0x00000DEE,
11609 0x033, 0x00000028,
11610 0x03F, 0x00000DF1,
11611 0x033, 0x00000029,
11612 0x03F, 0x00000DF4,
11613 0x033, 0x0000002A,
11614 0x03F, 0x00000DF7,
11615 0x93000004, 0x00000000, 0x40000000, 0x00000000,
11616 0x033, 0x00000020,
11617 0x03F, 0x00000467,
11618 0x033, 0x00000021,
11619 0x03F, 0x00000867,
11620 0x033, 0x00000022,
11621 0x03F, 0x00000908,
11622 0x033, 0x00000023,
11623 0x03F, 0x00000D09,
11624 0x033, 0x00000024,
11625 0x03F, 0x00000D49,
11626 0x033, 0x00000025,
11627 0x03F, 0x00000D8A,
9335 0x033, 0x00000026, 11628 0x033, 0x00000026,
9336 0x03F, 0x00000DEB, 11629 0x03F, 0x00000DEB,
9337 0x033, 0x00000027, 11630 0x033, 0x00000027,
@@ -9396,9 +11689,27 @@ static const u32 rtw8822c_rf_b[] = {
9396 0x0FE, 0x00000000, 11689 0x0FE, 0x00000000,
9397 0x0FE, 0x00000000, 11690 0x0FE, 0x00000000,
9398 0x092, 0x00084800, 11691 0x092, 0x00084800,
9399 0x08F, 0x0000182C, 11692 0x08F, 0x00001B4C,
9400 0x088, 0x0004326B, 11693 0x088, 0x0004326B,
9401 0x019, 0x00000005, 11694 0x019, 0x00000005,
11695 0x0EF, 0x00080000,
11696 0x033, 0x00000004,
11697 0x03F, 0x000FD83F,
11698 0x0EF, 0x00000000,
11699 0x0EF, 0x00080000,
11700 0x033, 0x00000006,
11701 0x03F, 0x000DD83F,
11702 0x0EF, 0x00000000,
11703 0x0EF, 0x00080000,
11704 0x033, 0x00000007,
11705 0x03F, 0x000DF7BF,
11706 0x0EF, 0x00000000,
11707 0x0EF, 0x00040000,
11708 0x033, 0x00000006,
11709 0x03F, 0x00000002,
11710 0x033, 0x00000007,
11711 0x03F, 0x00000002,
11712 0x0EF, 0x00000000,
9402}; 11713};
9403 11714
9404RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_b, B); 11715RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_b, B);
@@ -11163,6 +13474,109 @@ static const struct rtw_txpwr_lmt_cfg_pair rtw8822c_txpwr_lmt_type0[] = {
11163 13474
11164RTW_DECL_TABLE_TXPWR_LMT(rtw8822c_txpwr_lmt_type0); 13475RTW_DECL_TABLE_TXPWR_LMT(rtw8822c_txpwr_lmt_type0);
11165 13476
13477static const u32 rtw8822c_dpk_afe_no_dpk[] = {
13478 0x18a4, BIT(7), 0,
13479 0x41a4, BIT(7), 0,
13480 0x1c38, MASKDWORD, 0xffa1005e,
13481 0x1830, MASKDWORD, 0x700b8041,
13482 0x1830, MASKDWORD, 0x70144041,
13483 0x1830, MASKDWORD, 0x70244041,
13484 0x1830, MASKDWORD, 0x70344041,
13485 0x1830, MASKDWORD, 0x70444041,
13486 0x1830, MASKDWORD, 0x705b8041,
13487 0x1830, MASKDWORD, 0x70644041,
13488 0x4130, MASKDWORD, 0x700b8041,
13489 0x4130, MASKDWORD, 0x70144041,
13490 0x4130, MASKDWORD, 0x70244041,
13491 0x4130, MASKDWORD, 0x70344041,
13492 0x4130, MASKDWORD, 0x70444041,
13493 0x4130, MASKDWORD, 0x705b8041,
13494 0x4130, MASKDWORD, 0x70644041,
13495 0x1830, MASKDWORD, 0x707b8041,
13496 0x1830, MASKDWORD, 0x708b8041,
13497 0x1830, MASKDWORD, 0x709b8041,
13498 0x1830, MASKDWORD, 0x70ab8041,
13499 0x1830, MASKDWORD, 0x70bb8041,
13500 0x1830, MASKDWORD, 0x70cb8041,
13501 0x1830, MASKDWORD, 0x70db8041,
13502 0x1830, MASKDWORD, 0x70eb8041,
13503 0x1830, MASKDWORD, 0x70fb8041,
13504 0x4130, MASKDWORD, 0x707b8041,
13505 0x4130, MASKDWORD, 0x708b8041,
13506 0x4130, MASKDWORD, 0x709b8041,
13507 0x4130, MASKDWORD, 0x70ab8041,
13508 0x4130, MASKDWORD, 0x70bb8041,
13509 0x4130, MASKDWORD, 0x70cb8041,
13510 0x4130, MASKDWORD, 0x70db8041,
13511 0x4130, MASKDWORD, 0x70eb8041,
13512 0x4130, MASKDWORD, 0x70fb8041,
13513};
13514
13515RTW_DECL_TABLE_DPK(rtw8822c_dpk_afe_no_dpk);
13516
13517static const u32 rtw8822c_dpk_afe_is_dpk[] = {
13518 0x1c38, MASKDWORD, 0xFFFFFFFF,
13519 0x1830, MASKDWORD, 0x700f0001,
13520 0x1830, MASKDWORD, 0x700f0001,
13521 0x1830, MASKDWORD, 0x701f0001,
13522 0x1830, MASKDWORD, 0x702f0001,
13523 0x1830, MASKDWORD, 0x703f0001,
13524 0x1830, MASKDWORD, 0x704f0001,
13525 0x1830, MASKDWORD, 0x705f0001,
13526 0x1830, MASKDWORD, 0x706f0001,
13527 0x1830, MASKDWORD, 0x707f0001,
13528 0x1830, MASKDWORD, 0x708f0001,
13529 0x1830, MASKDWORD, 0x709f0001,
13530 0x1830, MASKDWORD, 0x70af0001,
13531 0x1830, MASKDWORD, 0x70bf0001,
13532 0x1830, MASKDWORD, 0x70cf0001,
13533 0x1830, MASKDWORD, 0x70df0001,
13534 0x1830, MASKDWORD, 0x70ef0001,
13535 0x1830, MASKDWORD, 0x70ff0001,
13536 0x1830, MASKDWORD, 0x70ff0001,
13537 0x4130, MASKDWORD, 0x700f0001,
13538 0x4130, MASKDWORD, 0x700f0001,
13539 0x4130, MASKDWORD, 0x701f0001,
13540 0x4130, MASKDWORD, 0x702f0001,
13541 0x4130, MASKDWORD, 0x703f0001,
13542 0x4130, MASKDWORD, 0x704f0001,
13543 0x4130, MASKDWORD, 0x705f0001,
13544 0x4130, MASKDWORD, 0x706f0001,
13545 0x4130, MASKDWORD, 0x707f0001,
13546 0x4130, MASKDWORD, 0x708f0001,
13547 0x4130, MASKDWORD, 0x709f0001,
13548 0x4130, MASKDWORD, 0x70af0001,
13549 0x4130, MASKDWORD, 0x70bf0001,
13550 0x4130, MASKDWORD, 0x70cf0001,
13551 0x4130, MASKDWORD, 0x70df0001,
13552 0x4130, MASKDWORD, 0x70ef0001,
13553 0x4130, MASKDWORD, 0x70ff0001,
13554 0x4130, MASKDWORD, 0x70ff0001,
13555 0x18a4, BIT(7), 1,
13556 0x41a4, BIT(7), 1,
13557};
13558
13559RTW_DECL_TABLE_DPK(rtw8822c_dpk_afe_is_dpk);
13560
13561static const u32 rtw8822c_dpk_mac_bb[] = {
13562 0x1e24, BIT(17), 0x1,
13563 0x1d58, GENMASK(11, 3), 0x1ff,
13564 0x1864, BIT(31), 0x1,
13565 0x4164, BIT(31), 0x1,
13566 0x180c, BIT(27), 0x1,
13567 0x410c, BIT(27), 0x1,
13568 0x186c, BIT(7), 0x1,
13569 0x416c, BIT(7), 0x1,
13570 0x180c, GENMASK(1, 0), 0x0,
13571 0x410c, GENMASK(1, 0), 0x0,
13572 0x1a14, GENMASK(9, 8), 0x3,
13573 0x80c, GENMASK(3, 0), 0x8,
13574 0x824, GENMASK(19, 16), 0x3,
13575 0x824, GENMASK(27, 24), 0x3,
13576};
13577
13578RTW_DECL_TABLE_DPK(rtw8822c_dpk_mac_bb);
13579
11166static const u32 rtw8822c_array_mp_cal_init[] = { 13580static const u32 rtw8822c_array_mp_cal_init[] = {
11167 0x1b00, 0x00000008, 13581 0x1b00, 0x00000008,
11168 0x1b00, 0x00A70008, 13582 0x1b00, 0x00A70008,
@@ -11187,6 +13601,7 @@ static const u32 rtw8822c_array_mp_cal_init[] = {
11187 0x1b9c, 0x00000000, 13601 0x1b9c, 0x00000000,
11188 0x1bc0, 0x01000000, 13602 0x1bc0, 0x01000000,
11189 0x1bcc, 0x00000000, 13603 0x1bcc, 0x00000000,
13604 0x1bd8, 0xe0000001,
11190 0x1be4, 0x00000000, 13605 0x1be4, 0x00000000,
11191 0x1bec, 0x40000000, 13606 0x1bec, 0x40000000,
11192 0x1b40, 0x40000000, 13607 0x1b40, 0x40000000,
@@ -11450,6 +13865,7 @@ static const u32 rtw8822c_array_mp_cal_init[] = {
11450 0x1b9c, 0x00000000, 13865 0x1b9c, 0x00000000,
11451 0x1bc0, 0x01000000, 13866 0x1bc0, 0x01000000,
11452 0x1bcc, 0x00000000, 13867 0x1bcc, 0x00000000,
13868 0x1bd8, 0xe0000001,
11453 0x1be4, 0x00000000, 13869 0x1be4, 0x00000000,
11454 0x1bec, 0x40000000, 13870 0x1bec, 0x40000000,
11455 0x1b60, 0x1F100000, 13871 0x1b60, 0x1F100000,
@@ -11656,1656 +14072,1970 @@ static const u32 rtw8822c_array_mp_cal_init[] = {
11656 0x1b80, 0x00020257, 14072 0x1b80, 0x00020257,
11657 0x1b80, 0x30000265, 14073 0x1b80, 0x30000265,
11658 0x1b80, 0x30000267, 14074 0x1b80, 0x30000267,
11659 0x1b80, 0xa5100275, 14075 0x1b80, 0xa5110275,
11660 0x1b80, 0xa5100277, 14076 0x1b80, 0xa5110277,
11661 0x1b80, 0xe3520285, 14077 0x1b80, 0xe3ef0285,
11662 0x1b80, 0xe3520287, 14078 0x1b80, 0xe3ef0287,
11663 0x1b80, 0xf01d0295, 14079 0x1b80, 0xf01f0295,
11664 0x1b80, 0xf01d0297, 14080 0x1b80, 0xf01f0297,
11665 0x1b80, 0xf11d02a5, 14081 0x1b80, 0xf11f02a5,
11666 0x1b80, 0xf11d02a7, 14082 0x1b80, 0xf11f02a7,
11667 0x1b80, 0xf21d02b5, 14083 0x1b80, 0xf21f02b5,
11668 0x1b80, 0xf21d02b7, 14084 0x1b80, 0xf21f02b7,
11669 0x1b80, 0xf31d02c5, 14085 0x1b80, 0xf31f02c5,
11670 0x1b80, 0xf31d02c7, 14086 0x1b80, 0xf31f02c7,
11671 0x1b80, 0xf41d02d5, 14087 0x1b80, 0xf41f02d5,
11672 0x1b80, 0xf41d02d7, 14088 0x1b80, 0xf41f02d7,
11673 0x1b80, 0xf51d02e5, 14089 0x1b80, 0xf51f02e5,
11674 0x1b80, 0xf51d02e7, 14090 0x1b80, 0xf51f02e7,
11675 0x1b80, 0xf61d02f5, 14091 0x1b80, 0xf61f02f5,
11676 0x1b80, 0xf61d02f7, 14092 0x1b80, 0xf61f02f7,
11677 0x1b80, 0xf71d0305, 14093 0x1b80, 0xf71f0305,
11678 0x1b80, 0xf71d0307, 14094 0x1b80, 0xf71f0307,
11679 0x1b80, 0xf81d0315, 14095 0x1b80, 0xf81f0315,
11680 0x1b80, 0xf81d0317, 14096 0x1b80, 0xf81f0317,
11681 0x1b80, 0xf91d0325, 14097 0x1b80, 0xf91f0325,
11682 0x1b80, 0xf91d0327, 14098 0x1b80, 0xf91f0327,
11683 0x1b80, 0xfa1d0335, 14099 0x1b80, 0xfa1f0335,
11684 0x1b80, 0xfa1d0337, 14100 0x1b80, 0xfa1f0337,
11685 0x1b80, 0xfb1d0345, 14101 0x1b80, 0xfb1f0345,
11686 0x1b80, 0xfb1d0347, 14102 0x1b80, 0xfb1f0347,
11687 0x1b80, 0xfc1d0355, 14103 0x1b80, 0xfc1f0355,
11688 0x1b80, 0xfc1d0357, 14104 0x1b80, 0xfc1f0357,
11689 0x1b80, 0xfd1d0365, 14105 0x1b80, 0xfd1f0365,
11690 0x1b80, 0xfd1d0367, 14106 0x1b80, 0xfd1f0367,
11691 0x1b80, 0xf21d0375, 14107 0x1b80, 0xfe1f0375,
11692 0x1b80, 0xf21d0377, 14108 0x1b80, 0xfe1f0377,
11693 0x1b80, 0xf31d0385, 14109 0x1b80, 0xf11f0385,
11694 0x1b80, 0xf31d0387, 14110 0x1b80, 0xf11f0387,
11695 0x1b80, 0xf41d0395, 14111 0x1b80, 0xf21f0395,
11696 0x1b80, 0xf41d0397, 14112 0x1b80, 0xf21f0397,
11697 0x1b80, 0xf51d03a5, 14113 0x1b80, 0xf31f03a5,
11698 0x1b80, 0xf51d03a7, 14114 0x1b80, 0xf31f03a7,
11699 0x1b80, 0xf61d03b5, 14115 0x1b80, 0xf41f03b5,
11700 0x1b80, 0xf61d03b7, 14116 0x1b80, 0xf41f03b7,
11701 0x1b80, 0xf71d03c5, 14117 0x1b80, 0xf51f03c5,
11702 0x1b80, 0xf71d03c7, 14118 0x1b80, 0xf51f03c7,
11703 0x1b80, 0xf81d03d5, 14119 0x1b80, 0xf61f03d5,
11704 0x1b80, 0xf81d03d7, 14120 0x1b80, 0xf61f03d7,
11705 0x1b80, 0xf91d03e5, 14121 0x1b80, 0xf71f03e5,
11706 0x1b80, 0xf91d03e7, 14122 0x1b80, 0xf71f03e7,
11707 0x1b80, 0xfa1d03f5, 14123 0x1b80, 0xf81f03f5,
11708 0x1b80, 0xfa1d03f7, 14124 0x1b80, 0xf81f03f7,
11709 0x1b80, 0xfb1d0405, 14125 0x1b80, 0xf91f0405,
11710 0x1b80, 0xfb1d0407, 14126 0x1b80, 0xf91f0407,
11711 0x1b80, 0xfc1d0415, 14127 0x1b80, 0xfa1f0415,
11712 0x1b80, 0xfc1d0417, 14128 0x1b80, 0xfa1f0417,
11713 0x1b80, 0xfd1d0425, 14129 0x1b80, 0xfb1f0425,
11714 0x1b80, 0xfd1d0427, 14130 0x1b80, 0xfb1f0427,
11715 0x1b80, 0xfe1d0435, 14131 0x1b80, 0xfc1f0435,
11716 0x1b80, 0xfe1d0437, 14132 0x1b80, 0xfc1f0437,
11717 0x1b80, 0xff1d0445, 14133 0x1b80, 0xfd1f0445,
11718 0x1b80, 0xff1d0447, 14134 0x1b80, 0xfd1f0447,
11719 0x1b80, 0x00010455, 14135 0x1b80, 0xfe1f0455,
11720 0x1b80, 0x00010457, 14136 0x1b80, 0xfe1f0457,
11721 0x1b80, 0x30620465, 14137 0x1b80, 0xff1f0465,
11722 0x1b80, 0x30620467, 14138 0x1b80, 0xff1f0467,
11723 0x1b80, 0x307a0475, 14139 0x1b80, 0x00010475,
11724 0x1b80, 0x307a0477, 14140 0x1b80, 0x00010477,
11725 0x1b80, 0x307c0485, 14141 0x1b80, 0x30660485,
11726 0x1b80, 0x307c0487, 14142 0x1b80, 0x30660487,
11727 0x1b80, 0x30eb0495, 14143 0x1b80, 0x307e0495,
11728 0x1b80, 0x30eb0497, 14144 0x1b80, 0x307e0497,
11729 0x1b80, 0x308004a5, 14145 0x1b80, 0x308204a5,
11730 0x1b80, 0x308004a7, 14146 0x1b80, 0x308204a7,
11731 0x1b80, 0x308c04b5, 14147 0x1b80, 0x310c04b5,
11732 0x1b80, 0x308c04b7, 14148 0x1b80, 0x310c04b7,
11733 0x1b80, 0x309804c5, 14149 0x1b80, 0x308904c5,
11734 0x1b80, 0x309804c7, 14150 0x1b80, 0x308904c7,
11735 0x1b80, 0x307f04d5, 14151 0x1b80, 0x309804d5,
11736 0x1b80, 0x307f04d7, 14152 0x1b80, 0x309804d7,
11737 0x1b80, 0x308b04e5, 14153 0x1b80, 0x30a704e5,
11738 0x1b80, 0x308b04e7, 14154 0x1b80, 0x30a704e7,
11739 0x1b80, 0x309704f5, 14155 0x1b80, 0x308804f5,
11740 0x1b80, 0x309704f7, 14156 0x1b80, 0x308804f7,
11741 0x1b80, 0x30ef0505, 14157 0x1b80, 0x30970505,
11742 0x1b80, 0x30ef0507, 14158 0x1b80, 0x30970507,
11743 0x1b80, 0x30fa0515, 14159 0x1b80, 0x30a60515,
11744 0x1b80, 0x30fa0517, 14160 0x1b80, 0x30a60517,
11745 0x1b80, 0x31050525, 14161 0x1b80, 0x31100525,
11746 0x1b80, 0x31050527, 14162 0x1b80, 0x31100527,
11747 0x1b80, 0x316a0535, 14163 0x1b80, 0x311b0535,
11748 0x1b80, 0x316a0537, 14164 0x1b80, 0x311b0537,
11749 0x1b80, 0x307a0545, 14165 0x1b80, 0x31260545,
11750 0x1b80, 0x307a0547, 14166 0x1b80, 0x31260547,
11751 0x1b80, 0x30e90555, 14167 0x1b80, 0x31ae0555,
11752 0x1b80, 0x30e90557, 14168 0x1b80, 0x31ae0557,
11753 0x1b80, 0x31870565, 14169 0x1b80, 0x318b0565,
11754 0x1b80, 0x31870567, 14170 0x1b80, 0x318b0567,
11755 0x1b80, 0x31a00575, 14171 0x1b80, 0x31cb0575,
11756 0x1b80, 0x31a00577, 14172 0x1b80, 0x31cb0577,
11757 0x1b80, 0x31ba0585, 14173 0x1b80, 0x307e0585,
11758 0x1b80, 0x31ba0587, 14174 0x1b80, 0x307e0587,
11759 0x1b80, 0x31c20595, 14175 0x1b80, 0x310a0595,
11760 0x1b80, 0x31c20597, 14176 0x1b80, 0x310a0597,
11761 0x1b80, 0x31ca05a5, 14177 0x1b80, 0x31db05a5,
11762 0x1b80, 0x31ca05a7, 14178 0x1b80, 0x31db05a7,
11763 0x1b80, 0x31d205b5, 14179 0x1b80, 0x31f405b5,
11764 0x1b80, 0x31d205b7, 14180 0x1b80, 0x31f405b7,
11765 0x1b80, 0x31da05c5, 14181 0x1b80, 0x320e05c5,
11766 0x1b80, 0x31da05c7, 14182 0x1b80, 0x320e05c7,
11767 0x1b80, 0x31e905d5, 14183 0x1b80, 0x321605d5,
11768 0x1b80, 0x31e905d7, 14184 0x1b80, 0x321605d7,
11769 0x1b80, 0x31f805e5, 14185 0x1b80, 0x321e05e5,
11770 0x1b80, 0x31f805e7, 14186 0x1b80, 0x321e05e7,
11771 0x1b80, 0x31fe05f5, 14187 0x1b80, 0x322605f5,
11772 0x1b80, 0x31fe05f7, 14188 0x1b80, 0x322605f7,
11773 0x1b80, 0x32040605, 14189 0x1b80, 0x322e0605,
11774 0x1b80, 0x32040607, 14190 0x1b80, 0x322e0607,
11775 0x1b80, 0x320a0615, 14191 0x1b80, 0x323d0615,
11776 0x1b80, 0x320a0617, 14192 0x1b80, 0x323d0617,
11777 0x1b80, 0xe2eb0625, 14193 0x1b80, 0x324c0625,
11778 0x1b80, 0xe2eb0627, 14194 0x1b80, 0x324c0627,
11779 0x1b80, 0x4d040635, 14195 0x1b80, 0x32520635,
11780 0x1b80, 0x4d040637, 14196 0x1b80, 0x32520637,
11781 0x1b80, 0x20800645, 14197 0x1b80, 0x32580645,
11782 0x1b80, 0x20800647, 14198 0x1b80, 0x32580647,
11783 0x1b80, 0x00000655, 14199 0x1b80, 0x325e0655,
11784 0x1b80, 0x00000657, 14200 0x1b80, 0x325e0657,
11785 0x1b80, 0x4d000665, 14201 0x1b80, 0xe3880665,
11786 0x1b80, 0x4d000667, 14202 0x1b80, 0xe3880667,
11787 0x1b80, 0x55070675, 14203 0x1b80, 0x4d040675,
11788 0x1b80, 0x55070677, 14204 0x1b80, 0x4d040677,
11789 0x1b80, 0xe2e30685, 14205 0x1b80, 0x20800685,
11790 0x1b80, 0xe2e30687, 14206 0x1b80, 0x20800687,
11791 0x1b80, 0xe2e30695, 14207 0x1b80, 0x00000695,
11792 0x1b80, 0xe2e30697, 14208 0x1b80, 0x00000697,
11793 0x1b80, 0x4d0406a5, 14209 0x1b80, 0x4d0006a5,
11794 0x1b80, 0x4d0406a7, 14210 0x1b80, 0x4d0006a7,
11795 0x1b80, 0x208806b5, 14211 0x1b80, 0x550706b5,
11796 0x1b80, 0x208806b7, 14212 0x1b80, 0x550706b7,
11797 0x1b80, 0x020006c5, 14213 0x1b80, 0xe38006c5,
11798 0x1b80, 0x020006c7, 14214 0x1b80, 0xe38006c7,
11799 0x1b80, 0x4d0006d5, 14215 0x1b80, 0xe38006d5,
11800 0x1b80, 0x4d0006d7, 14216 0x1b80, 0xe38006d7,
11801 0x1b80, 0x550f06e5, 14217 0x1b80, 0x4d0406e5,
11802 0x1b80, 0x550f06e7, 14218 0x1b80, 0x4d0406e7,
11803 0x1b80, 0xe2e306f5, 14219 0x1b80, 0x208806f5,
11804 0x1b80, 0xe2e306f7, 14220 0x1b80, 0x208806f7,
11805 0x1b80, 0x4f020705, 14221 0x1b80, 0x02000705,
11806 0x1b80, 0x4f020707, 14222 0x1b80, 0x02000707,
11807 0x1b80, 0x4e000715, 14223 0x1b80, 0x4d000715,
11808 0x1b80, 0x4e000717, 14224 0x1b80, 0x4d000717,
11809 0x1b80, 0x53020725, 14225 0x1b80, 0x550f0725,
11810 0x1b80, 0x53020727, 14226 0x1b80, 0x550f0727,
11811 0x1b80, 0x52010735, 14227 0x1b80, 0xe3800735,
11812 0x1b80, 0x52010737, 14228 0x1b80, 0xe3800737,
11813 0x1b80, 0xe2e70745, 14229 0x1b80, 0x4f020745,
11814 0x1b80, 0xe2e70747, 14230 0x1b80, 0x4f020747,
11815 0x1b80, 0x4d080755, 14231 0x1b80, 0x4e000755,
11816 0x1b80, 0x4d080757, 14232 0x1b80, 0x4e000757,
11817 0x1b80, 0x57100765, 14233 0x1b80, 0x53020765,
11818 0x1b80, 0x57100767, 14234 0x1b80, 0x53020767,
11819 0x1b80, 0x57000775, 14235 0x1b80, 0x52010775,
11820 0x1b80, 0x57000777, 14236 0x1b80, 0x52010777,
11821 0x1b80, 0x4d000785, 14237 0x1b80, 0xe3840785,
11822 0x1b80, 0x4d000787, 14238 0x1b80, 0xe3840787,
11823 0x1b80, 0x00010795, 14239 0x1b80, 0x4d080795,
11824 0x1b80, 0x00010797, 14240 0x1b80, 0x4d080797,
11825 0x1b80, 0xe2eb07a5, 14241 0x1b80, 0x571007a5,
11826 0x1b80, 0xe2eb07a7, 14242 0x1b80, 0x571007a7,
11827 0x1b80, 0x000107b5, 14243 0x1b80, 0x570007b5,
11828 0x1b80, 0x000107b7, 14244 0x1b80, 0x570007b7,
11829 0x1b80, 0x620607c5, 14245 0x1b80, 0x4d0007c5,
11830 0x1b80, 0x620607c7, 14246 0x1b80, 0x4d0007c7,
11831 0x1b80, 0xe2eb07d5, 14247 0x1b80, 0x000107d5,
11832 0x1b80, 0xe2eb07d7, 14248 0x1b80, 0x000107d7,
11833 0x1b80, 0x000107e5, 14249 0x1b80, 0xe38807e5,
11834 0x1b80, 0x000107e7, 14250 0x1b80, 0xe38807e7,
11835 0x1b80, 0x620607f5, 14251 0x1b80, 0x0bbd07f5,
11836 0x1b80, 0x620607f7, 14252 0x1b80, 0x0bbd07f7,
11837 0x1b80, 0x30ad0805, 14253 0x1b80, 0xe3e20805,
11838 0x1b80, 0x30ad0807, 14254 0x1b80, 0xe3e20807,
11839 0x1b80, 0x00260815, 14255 0x1b80, 0x00010815,
11840 0x1b80, 0x00260817, 14256 0x1b80, 0x00010817,
11841 0x1b80, 0xe3450825, 14257 0x1b80, 0x62060825,
11842 0x1b80, 0xe3450827, 14258 0x1b80, 0x62060827,
11843 0x1b80, 0x00020835, 14259 0x1b80, 0xe3880835,
11844 0x1b80, 0x00020837, 14260 0x1b80, 0xe3880837,
11845 0x1b80, 0x54ec0845, 14261 0x1b80, 0x0bbd0845,
11846 0x1b80, 0x54ec0847, 14262 0x1b80, 0x0bbd0847,
11847 0x1b80, 0x0ba60855, 14263 0x1b80, 0xe3e20855,
11848 0x1b80, 0x0ba60857, 14264 0x1b80, 0xe3e20857,
11849 0x1b80, 0x00260865, 14265 0x1b80, 0x00010865,
11850 0x1b80, 0x00260867, 14266 0x1b80, 0x00010867,
11851 0x1b80, 0xe3450875, 14267 0x1b80, 0x00010875,
11852 0x1b80, 0xe3450877, 14268 0x1b80, 0x00010877,
11853 0x1b80, 0x00020885, 14269 0x1b80, 0x62060885,
11854 0x1b80, 0x00020887, 14270 0x1b80, 0x62060887,
11855 0x1b80, 0x63c30895, 14271 0x1b80, 0x30bc0895,
11856 0x1b80, 0x63c30897, 14272 0x1b80, 0x30bc0897,
11857 0x1b80, 0x30d908a5, 14273 0x1b80, 0x002608a5,
11858 0x1b80, 0x30d908a7, 14274 0x1b80, 0x002608a7,
11859 0x1b80, 0x620608b5, 14275 0x1b80, 0xe3e208b5,
11860 0x1b80, 0x620608b7, 14276 0x1b80, 0xe3e208b7,
11861 0x1b80, 0x30a508c5, 14277 0x1b80, 0x000208c5,
11862 0x1b80, 0x30a508c7, 14278 0x1b80, 0x000208c7,
11863 0x1b80, 0x002408d5, 14279 0x1b80, 0x54ec08d5,
11864 0x1b80, 0x002408d7, 14280 0x1b80, 0x54ec08d7,
11865 0x1b80, 0xe34508e5, 14281 0x1b80, 0x0ba608e5,
11866 0x1b80, 0xe34508e7, 14282 0x1b80, 0x0ba608e7,
11867 0x1b80, 0x000208f5, 14283 0x1b80, 0x002608f5,
11868 0x1b80, 0x000208f7, 14284 0x1b80, 0x002608f7,
11869 0x1b80, 0x54ea0905, 14285 0x1b80, 0xe3e20905,
11870 0x1b80, 0x54ea0907, 14286 0x1b80, 0xe3e20907,
11871 0x1b80, 0x0ba60915, 14287 0x1b80, 0x00020915,
11872 0x1b80, 0x0ba60917, 14288 0x1b80, 0x00020917,
11873 0x1b80, 0x00240925, 14289 0x1b80, 0xf7f50925,
11874 0x1b80, 0x00240927, 14290 0x1b80, 0xf7f50927,
11875 0x1b80, 0xe3450935, 14291 0x1b80, 0x00300935,
11876 0x1b80, 0xe3450937, 14292 0x1b80, 0x00300937,
11877 0x1b80, 0x00020945, 14293 0x1b80, 0x63c30945,
11878 0x1b80, 0x00020947, 14294 0x1b80, 0x63c30947,
11879 0x1b80, 0x63c30955, 14295 0x1b80, 0x00020955,
11880 0x1b80, 0x63c30957, 14296 0x1b80, 0x00020957,
11881 0x1b80, 0x30d90965, 14297 0x1b80, 0x318b0965,
11882 0x1b80, 0x30d90967, 14298 0x1b80, 0x318b0967,
11883 0x1b80, 0x62060975, 14299 0x1b80, 0x62060975,
11884 0x1b80, 0x62060977, 14300 0x1b80, 0x62060977,
11885 0x1b80, 0x6c100985, 14301 0x1b80, 0x30b40985,
11886 0x1b80, 0x6c100987, 14302 0x1b80, 0x30b40987,
11887 0x1b80, 0x6d0f0995, 14303 0x1b80, 0x00240995,
11888 0x1b80, 0x6d0f0997, 14304 0x1b80, 0x00240997,
11889 0x1b80, 0xe2eb09a5, 14305 0x1b80, 0xe3e209a5,
11890 0x1b80, 0xe2eb09a7, 14306 0x1b80, 0xe3e209a7,
11891 0x1b80, 0xe34509b5, 14307 0x1b80, 0x000209b5,
11892 0x1b80, 0xe34509b7, 14308 0x1b80, 0x000209b7,
11893 0x1b80, 0x6c2409c5, 14309 0x1b80, 0x54ea09c5,
11894 0x1b80, 0x6c2409c7, 14310 0x1b80, 0x54ea09c7,
11895 0x1b80, 0xe2eb09d5, 14311 0x1b80, 0x0ba609d5,
11896 0x1b80, 0xe2eb09d7, 14312 0x1b80, 0x0ba609d7,
11897 0x1b80, 0xe34509e5, 14313 0x1b80, 0x002409e5,
11898 0x1b80, 0xe34509e7, 14314 0x1b80, 0x002409e7,
11899 0x1b80, 0x6c4409f5, 14315 0x1b80, 0xe3e209f5,
11900 0x1b80, 0x6c4409f7, 14316 0x1b80, 0xe3e209f7,
11901 0x1b80, 0xe2eb0a05, 14317 0x1b80, 0x00020a05,
11902 0x1b80, 0xe2eb0a07, 14318 0x1b80, 0x00020a07,
11903 0x1b80, 0xe3450a15, 14319 0x1b80, 0xf8e60a15,
11904 0x1b80, 0xe3450a17, 14320 0x1b80, 0xf8e60a17,
11905 0x1b80, 0x6c640a25, 14321 0x1b80, 0x00300a25,
11906 0x1b80, 0x6c640a27, 14322 0x1b80, 0x00300a27,
11907 0x1b80, 0xe2eb0a35, 14323 0x1b80, 0x63c30a35,
11908 0x1b80, 0xe2eb0a37, 14324 0x1b80, 0x63c30a37,
11909 0x1b80, 0xe3450a45, 14325 0x1b80, 0x00020a45,
11910 0x1b80, 0xe3450a47, 14326 0x1b80, 0x00020a47,
11911 0x1b80, 0x0baa0a55, 14327 0x1b80, 0x318b0a55,
11912 0x1b80, 0x0baa0a57, 14328 0x1b80, 0x318b0a57,
11913 0x1b80, 0x6c840a65, 14329 0x1b80, 0x62060a65,
11914 0x1b80, 0x6c840a67, 14330 0x1b80, 0x62060a67,
11915 0x1b80, 0x6d0f0a75, 14331 0x1b80, 0x6c100a75,
11916 0x1b80, 0x6d0f0a77, 14332 0x1b80, 0x6c100a77,
11917 0x1b80, 0xe2eb0a85, 14333 0x1b80, 0x6d0f0a85,
11918 0x1b80, 0xe2eb0a87, 14334 0x1b80, 0x6d0f0a87,
11919 0x1b80, 0xe3450a95, 14335 0x1b80, 0xe3880a95,
11920 0x1b80, 0xe3450a97, 14336 0x1b80, 0xe3880a97,
11921 0x1b80, 0x6ca40aa5, 14337 0x1b80, 0xe3e20aa5,
11922 0x1b80, 0x6ca40aa7, 14338 0x1b80, 0xe3e20aa7,
11923 0x1b80, 0xe2eb0ab5, 14339 0x1b80, 0x6c240ab5,
11924 0x1b80, 0xe2eb0ab7, 14340 0x1b80, 0x6c240ab7,
11925 0x1b80, 0xe3450ac5, 14341 0x1b80, 0xe3880ac5,
11926 0x1b80, 0xe3450ac7, 14342 0x1b80, 0xe3880ac7,
11927 0x1b80, 0x0bac0ad5, 14343 0x1b80, 0xe3e20ad5,
11928 0x1b80, 0x0bac0ad7, 14344 0x1b80, 0xe3e20ad7,
11929 0x1b80, 0x6cc40ae5, 14345 0x1b80, 0x6c440ae5,
11930 0x1b80, 0x6cc40ae7, 14346 0x1b80, 0x6c440ae7,
11931 0x1b80, 0x6d0f0af5, 14347 0x1b80, 0xe3880af5,
11932 0x1b80, 0x6d0f0af7, 14348 0x1b80, 0xe3880af7,
11933 0x1b80, 0xe2eb0b05, 14349 0x1b80, 0xe3e20b05,
11934 0x1b80, 0xe2eb0b07, 14350 0x1b80, 0xe3e20b07,
11935 0x1b80, 0xe3450b15, 14351 0x1b80, 0x6c640b15,
11936 0x1b80, 0xe3450b17, 14352 0x1b80, 0x6c640b17,
11937 0x1b80, 0x6ce40b25, 14353 0x1b80, 0xe3880b25,
11938 0x1b80, 0x6ce40b27, 14354 0x1b80, 0xe3880b27,
11939 0x1b80, 0xe2eb0b35, 14355 0x1b80, 0xe3e20b35,
11940 0x1b80, 0xe2eb0b37, 14356 0x1b80, 0xe3e20b37,
11941 0x1b80, 0xe3450b45, 14357 0x1b80, 0x0baa0b45,
11942 0x1b80, 0xe3450b47, 14358 0x1b80, 0x0baa0b47,
11943 0x1b80, 0x6cf40b55, 14359 0x1b80, 0x6c840b55,
11944 0x1b80, 0x6cf40b57, 14360 0x1b80, 0x6c840b57,
11945 0x1b80, 0xe2eb0b65, 14361 0x1b80, 0x6d0f0b65,
11946 0x1b80, 0xe2eb0b67, 14362 0x1b80, 0x6d0f0b67,
11947 0x1b80, 0xe3450b75, 14363 0x1b80, 0xe3880b75,
11948 0x1b80, 0xe3450b77, 14364 0x1b80, 0xe3880b77,
11949 0x1b80, 0x6c0c0b85, 14365 0x1b80, 0xe3e20b85,
11950 0x1b80, 0x6c0c0b87, 14366 0x1b80, 0xe3e20b87,
11951 0x1b80, 0x6d000b95, 14367 0x1b80, 0x6ca40b95,
11952 0x1b80, 0x6d000b97, 14368 0x1b80, 0x6ca40b97,
11953 0x1b80, 0xe2eb0ba5, 14369 0x1b80, 0xe3880ba5,
11954 0x1b80, 0xe2eb0ba7, 14370 0x1b80, 0xe3880ba7,
11955 0x1b80, 0xe3450bb5, 14371 0x1b80, 0xe3e20bb5,
11956 0x1b80, 0xe3450bb7, 14372 0x1b80, 0xe3e20bb7,
11957 0x1b80, 0x6c1c0bc5, 14373 0x1b80, 0x0bac0bc5,
11958 0x1b80, 0x6c1c0bc7, 14374 0x1b80, 0x0bac0bc7,
11959 0x1b80, 0xe2eb0bd5, 14375 0x1b80, 0x6cc40bd5,
11960 0x1b80, 0xe2eb0bd7, 14376 0x1b80, 0x6cc40bd7,
11961 0x1b80, 0xe3450be5, 14377 0x1b80, 0x6d0f0be5,
11962 0x1b80, 0xe3450be7, 14378 0x1b80, 0x6d0f0be7,
11963 0x1b80, 0x6c3c0bf5, 14379 0x1b80, 0xe3880bf5,
11964 0x1b80, 0x6c3c0bf7, 14380 0x1b80, 0xe3880bf7,
11965 0x1b80, 0xe2eb0c05, 14381 0x1b80, 0xe3e20c05,
11966 0x1b80, 0xe2eb0c07, 14382 0x1b80, 0xe3e20c07,
11967 0x1b80, 0xe3450c15, 14383 0x1b80, 0x6ce40c15,
11968 0x1b80, 0xe3450c17, 14384 0x1b80, 0x6ce40c17,
11969 0x1b80, 0xf4bf0c25, 14385 0x1b80, 0xe3880c25,
11970 0x1b80, 0xf4bf0c27, 14386 0x1b80, 0xe3880c27,
11971 0x1b80, 0xf7be0c35, 14387 0x1b80, 0xe3e20c35,
11972 0x1b80, 0xf7be0c37, 14388 0x1b80, 0xe3e20c37,
11973 0x1b80, 0x6c5c0c45, 14389 0x1b80, 0x6cf40c45,
11974 0x1b80, 0x6c5c0c47, 14390 0x1b80, 0x6cf40c47,
11975 0x1b80, 0xe2eb0c55, 14391 0x1b80, 0xe3880c55,
11976 0x1b80, 0xe2eb0c57, 14392 0x1b80, 0xe3880c57,
11977 0x1b80, 0xe3450c65, 14393 0x1b80, 0xe3e20c65,
11978 0x1b80, 0xe3450c67, 14394 0x1b80, 0xe3e20c67,
11979 0x1b80, 0x6c7c0c75, 14395 0x1b80, 0x6c0c0c75,
11980 0x1b80, 0x6c7c0c77, 14396 0x1b80, 0x6c0c0c77,
11981 0x1b80, 0xe2eb0c85, 14397 0x1b80, 0x6d000c85,
11982 0x1b80, 0xe2eb0c87, 14398 0x1b80, 0x6d000c87,
11983 0x1b80, 0xe3450c95, 14399 0x1b80, 0xe3880c95,
11984 0x1b80, 0xe3450c97, 14400 0x1b80, 0xe3880c97,
11985 0x1b80, 0xf5c30ca5, 14401 0x1b80, 0xe3e20ca5,
11986 0x1b80, 0xf5c30ca7, 14402 0x1b80, 0xe3e20ca7,
11987 0x1b80, 0xf8c20cb5, 14403 0x1b80, 0x6c1c0cb5,
11988 0x1b80, 0xf8c20cb7, 14404 0x1b80, 0x6c1c0cb7,
11989 0x1b80, 0x6c9c0cc5, 14405 0x1b80, 0xe3880cc5,
11990 0x1b80, 0x6c9c0cc7, 14406 0x1b80, 0xe3880cc7,
11991 0x1b80, 0xe2eb0cd5, 14407 0x1b80, 0xe3e20cd5,
11992 0x1b80, 0xe2eb0cd7, 14408 0x1b80, 0xe3e20cd7,
11993 0x1b80, 0xe3450ce5, 14409 0x1b80, 0x6c3c0ce5,
11994 0x1b80, 0xe3450ce7, 14410 0x1b80, 0x6c3c0ce7,
11995 0x1b80, 0x6cbc0cf5, 14411 0x1b80, 0xe3880cf5,
11996 0x1b80, 0x6cbc0cf7, 14412 0x1b80, 0xe3880cf7,
11997 0x1b80, 0xe2eb0d05, 14413 0x1b80, 0xe3e20d05,
11998 0x1b80, 0xe2eb0d07, 14414 0x1b80, 0xe3e20d07,
11999 0x1b80, 0xe3450d15, 14415 0x1b80, 0xf4b90d15,
12000 0x1b80, 0xe3450d17, 14416 0x1b80, 0xf4b90d17,
12001 0x1b80, 0x6cdc0d25, 14417 0x1b80, 0xf7b80d25,
12002 0x1b80, 0x6cdc0d27, 14418 0x1b80, 0xf7b80d27,
12003 0x1b80, 0xe2eb0d35, 14419 0x1b80, 0x6c5c0d35,
12004 0x1b80, 0xe2eb0d37, 14420 0x1b80, 0x6c5c0d37,
12005 0x1b80, 0xe3450d45, 14421 0x1b80, 0xe3880d45,
12006 0x1b80, 0xe3450d47, 14422 0x1b80, 0xe3880d47,
12007 0x1b80, 0x6cf00d55, 14423 0x1b80, 0xe3e20d55,
12008 0x1b80, 0x6cf00d57, 14424 0x1b80, 0xe3e20d57,
12009 0x1b80, 0xe2eb0d65, 14425 0x1b80, 0x6c7c0d65,
12010 0x1b80, 0xe2eb0d67, 14426 0x1b80, 0x6c7c0d67,
12011 0x1b80, 0xe3450d75, 14427 0x1b80, 0xe3880d75,
12012 0x1b80, 0xe3450d77, 14428 0x1b80, 0xe3880d77,
12013 0x1b80, 0x63c30d85, 14429 0x1b80, 0xe3e20d85,
12014 0x1b80, 0x63c30d87, 14430 0x1b80, 0xe3e20d87,
12015 0x1b80, 0x55010d95, 14431 0x1b80, 0xf5c00d95,
12016 0x1b80, 0x55010d97, 14432 0x1b80, 0xf5c00d97,
12017 0x1b80, 0x57040da5, 14433 0x1b80, 0xf8bf0da5,
12018 0x1b80, 0x57040da7, 14434 0x1b80, 0xf8bf0da7,
12019 0x1b80, 0x57000db5, 14435 0x1b80, 0x6c9c0db5,
12020 0x1b80, 0x57000db7, 14436 0x1b80, 0x6c9c0db7,
12021 0x1b80, 0x96000dc5, 14437 0x1b80, 0xe3880dc5,
12022 0x1b80, 0x96000dc7, 14438 0x1b80, 0xe3880dc7,
12023 0x1b80, 0x57080dd5, 14439 0x1b80, 0xe3e20dd5,
12024 0x1b80, 0x57080dd7, 14440 0x1b80, 0xe3e20dd7,
12025 0x1b80, 0x57000de5, 14441 0x1b80, 0x6cbc0de5,
12026 0x1b80, 0x57000de7, 14442 0x1b80, 0x6cbc0de7,
12027 0x1b80, 0x95000df5, 14443 0x1b80, 0xe3880df5,
12028 0x1b80, 0x95000df7, 14444 0x1b80, 0xe3880df7,
12029 0x1b80, 0x4d000e05, 14445 0x1b80, 0xe3e20e05,
12030 0x1b80, 0x4d000e07, 14446 0x1b80, 0xe3e20e07,
12031 0x1b80, 0x63050e15, 14447 0x1b80, 0x6cdc0e15,
12032 0x1b80, 0x63050e17, 14448 0x1b80, 0x6cdc0e17,
12033 0x1b80, 0x7b400e25, 14449 0x1b80, 0xe3880e25,
12034 0x1b80, 0x7b400e27, 14450 0x1b80, 0xe3880e27,
12035 0x1b80, 0x7a000e35, 14451 0x1b80, 0xe3e20e35,
12036 0x1b80, 0x7a000e37, 14452 0x1b80, 0xe3e20e37,
12037 0x1b80, 0x79000e45, 14453 0x1b80, 0x6cf00e45,
12038 0x1b80, 0x79000e47, 14454 0x1b80, 0x6cf00e47,
12039 0x1b80, 0x7f400e55, 14455 0x1b80, 0xe3880e55,
12040 0x1b80, 0x7f400e57, 14456 0x1b80, 0xe3880e57,
12041 0x1b80, 0x7e000e65, 14457 0x1b80, 0xe3e20e65,
12042 0x1b80, 0x7e000e67, 14458 0x1b80, 0xe3e20e67,
12043 0x1b80, 0x7d000e75, 14459 0x1b80, 0xf9a00e75,
12044 0x1b80, 0x7d000e77, 14460 0x1b80, 0xf9a00e77,
12045 0x1b80, 0x00010e85, 14461 0x1b80, 0x00300e85,
12046 0x1b80, 0x00010e87, 14462 0x1b80, 0x00300e87,
12047 0x1b80, 0xe3170e95, 14463 0x1b80, 0x63c30e95,
12048 0x1b80, 0xe3170e97, 14464 0x1b80, 0x63c30e97,
12049 0x1b80, 0x00010ea5, 14465 0x1b80, 0x00020ea5,
12050 0x1b80, 0x00010ea7, 14466 0x1b80, 0x00020ea7,
12051 0x1b80, 0x5c320eb5, 14467 0x1b80, 0x318b0eb5,
12052 0x1b80, 0x5c320eb7, 14468 0x1b80, 0x318b0eb7,
12053 0x1b80, 0xe3410ec5, 14469 0x1b80, 0x00300ec5,
12054 0x1b80, 0xe3410ec7, 14470 0x1b80, 0x00300ec7,
12055 0x1b80, 0xe3170ed5, 14471 0x1b80, 0x00000ed5,
12056 0x1b80, 0xe3170ed7, 14472 0x1b80, 0x00000ed7,
12057 0x1b80, 0x00010ee5, 14473 0x1b80, 0x00020ee5,
12058 0x1b80, 0x00010ee7, 14474 0x1b80, 0x00020ee7,
12059 0x1b80, 0x31260ef5, 14475 0x1b80, 0x55010ef5,
12060 0x1b80, 0x31260ef7, 14476 0x1b80, 0x55010ef7,
12061 0x1b80, 0x00260f05, 14477 0x1b80, 0x57040f05,
12062 0x1b80, 0x00260f07, 14478 0x1b80, 0x57040f07,
12063 0x1b80, 0xe34a0f15, 14479 0x1b80, 0x57000f15,
12064 0x1b80, 0xe34a0f17, 14480 0x1b80, 0x57000f17,
12065 0x1b80, 0x00020f25, 14481 0x1b80, 0x96000f25,
12066 0x1b80, 0x00020f27, 14482 0x1b80, 0x96000f27,
12067 0x1b80, 0x54ec0f35, 14483 0x1b80, 0x00070f35,
12068 0x1b80, 0x54ec0f37, 14484 0x1b80, 0x00070f37,
12069 0x1b80, 0x0ba60f45, 14485 0x1b80, 0x5be00f45,
12070 0x1b80, 0x0ba60f47, 14486 0x1b80, 0x5be00f47,
12071 0x1b80, 0x00260f55, 14487 0x1b80, 0x5a000f55,
12072 0x1b80, 0x00260f57, 14488 0x1b80, 0x5a000f57,
12073 0x1b80, 0xe34a0f65, 14489 0x1b80, 0x59000f65,
12074 0x1b80, 0xe34a0f67, 14490 0x1b80, 0x59000f67,
12075 0x1b80, 0x00020f75, 14491 0x1b80, 0x58000f75,
12076 0x1b80, 0x00020f77, 14492 0x1b80, 0x58000f77,
12077 0x1b80, 0x63830f85, 14493 0x1b80, 0x00040f85,
12078 0x1b80, 0x63830f87, 14494 0x1b80, 0x00040f87,
12079 0x1b80, 0x30d90f95, 14495 0x1b80, 0x57080f95,
12080 0x1b80, 0x30d90f97, 14496 0x1b80, 0x57080f97,
12081 0x1b80, 0x311a0fa5, 14497 0x1b80, 0x57000fa5,
12082 0x1b80, 0x311a0fa7, 14498 0x1b80, 0x57000fa7,
12083 0x1b80, 0x00240fb5, 14499 0x1b80, 0x95000fb5,
12084 0x1b80, 0x00240fb7, 14500 0x1b80, 0x95000fb7,
12085 0x1b80, 0xe34a0fc5, 14501 0x1b80, 0x00070fc5,
12086 0x1b80, 0xe34a0fc7, 14502 0x1b80, 0x00070fc7,
12087 0x1b80, 0x00020fd5, 14503 0x1b80, 0x58010fd5,
12088 0x1b80, 0x00020fd7, 14504 0x1b80, 0x58010fd7,
12089 0x1b80, 0x54ea0fe5, 14505 0x1b80, 0x00040fe5,
12090 0x1b80, 0x54ea0fe7, 14506 0x1b80, 0x00040fe7,
12091 0x1b80, 0x0ba60ff5, 14507 0x1b80, 0x00300ff5,
12092 0x1b80, 0x0ba60ff7, 14508 0x1b80, 0x00300ff7,
12093 0x1b80, 0x00241005, 14509 0x1b80, 0x00001005,
12094 0x1b80, 0x00241007, 14510 0x1b80, 0x00001007,
12095 0x1b80, 0xe34a1015, 14511 0x1b80, 0x00021015,
12096 0x1b80, 0xe34a1017, 14512 0x1b80, 0x00021017,
12097 0x1b80, 0x00021025, 14513 0x1b80, 0x63051025,
12098 0x1b80, 0x00021027, 14514 0x1b80, 0x63051027,
12099 0x1b80, 0x63831035, 14515 0x1b80, 0x7b401035,
12100 0x1b80, 0x63831037, 14516 0x1b80, 0x7b401037,
12101 0x1b80, 0x30d91045, 14517 0x1b80, 0x7a001045,
12102 0x1b80, 0x30d91047, 14518 0x1b80, 0x7a001047,
12103 0x1b80, 0x5c321055, 14519 0x1b80, 0x79001055,
12104 0x1b80, 0x5c321057, 14520 0x1b80, 0x79001057,
12105 0x1b80, 0x54e61065, 14521 0x1b80, 0x7f401065,
12106 0x1b80, 0x54e61067, 14522 0x1b80, 0x7f401067,
12107 0x1b80, 0x6e101075, 14523 0x1b80, 0x7e001075,
12108 0x1b80, 0x6e101077, 14524 0x1b80, 0x7e001077,
12109 0x1b80, 0x6f0f1085, 14525 0x1b80, 0x7d001085,
12110 0x1b80, 0x6f0f1087, 14526 0x1b80, 0x7d001087,
12111 0x1b80, 0xe3171095, 14527 0x1b80, 0x00011095,
12112 0x1b80, 0xe3171097, 14528 0x1b80, 0x00011097,
12113 0x1b80, 0xe34a10a5, 14529 0x1b80, 0xe3b410a5,
12114 0x1b80, 0xe34a10a7, 14530 0x1b80, 0xe3b410a7,
12115 0x1b80, 0x5c3210b5, 14531 0x1b80, 0x000110b5,
12116 0x1b80, 0x5c3210b7, 14532 0x1b80, 0x000110b7,
12117 0x1b80, 0x54e710c5, 14533 0x1b80, 0x5c3210c5,
12118 0x1b80, 0x54e710c7, 14534 0x1b80, 0x5c3210c7,
12119 0x1b80, 0x6e2410d5, 14535 0x1b80, 0x54fd10d5,
12120 0x1b80, 0x6e2410d7, 14536 0x1b80, 0x54fd10d7,
12121 0x1b80, 0xe31710e5, 14537 0x1b80, 0xe3b410e5,
12122 0x1b80, 0xe31710e7, 14538 0x1b80, 0xe3b410e7,
12123 0x1b80, 0xe34a10f5, 14539 0x1b80, 0x000110f5,
12124 0x1b80, 0xe34a10f7, 14540 0x1b80, 0x000110f7,
12125 0x1b80, 0x5c321105, 14541 0x1b80, 0x31471105,
12126 0x1b80, 0x5c321107, 14542 0x1b80, 0x31471107,
12127 0x1b80, 0x54e81115, 14543 0x1b80, 0x00261115,
12128 0x1b80, 0x54e81117, 14544 0x1b80, 0x00261117,
12129 0x1b80, 0x6e441125, 14545 0x1b80, 0xe3e71125,
12130 0x1b80, 0x6e441127, 14546 0x1b80, 0xe3e71127,
12131 0x1b80, 0xe3171135, 14547 0x1b80, 0x00021135,
12132 0x1b80, 0xe3171137, 14548 0x1b80, 0x00021137,
12133 0x1b80, 0xe34a1145, 14549 0x1b80, 0x54ec1145,
12134 0x1b80, 0xe34a1147, 14550 0x1b80, 0x54ec1147,
12135 0x1b80, 0x5c321155, 14551 0x1b80, 0x0ba61155,
12136 0x1b80, 0x5c321157, 14552 0x1b80, 0x0ba61157,
12137 0x1b80, 0x54e91165, 14553 0x1b80, 0x00261165,
12138 0x1b80, 0x54e91167, 14554 0x1b80, 0x00261167,
12139 0x1b80, 0x6e641175, 14555 0x1b80, 0xe3e71175,
12140 0x1b80, 0x6e641177, 14556 0x1b80, 0xe3e71177,
12141 0x1b80, 0xe3171185, 14557 0x1b80, 0x00021185,
12142 0x1b80, 0xe3171187, 14558 0x1b80, 0x00021187,
12143 0x1b80, 0xe34a1195, 14559 0x1b80, 0x63431195,
12144 0x1b80, 0xe34a1197, 14560 0x1b80, 0x63431197,
12145 0x1b80, 0x5c3211a5, 14561 0x1b80, 0x30ec11a5,
12146 0x1b80, 0x5c3211a7, 14562 0x1b80, 0x30ec11a7,
12147 0x1b80, 0x54ea11b5, 14563 0x1b80, 0x313b11b5,
12148 0x1b80, 0x54ea11b7, 14564 0x1b80, 0x313b11b7,
12149 0x1b80, 0x0baa11c5, 14565 0x1b80, 0x002411c5,
12150 0x1b80, 0x0baa11c7, 14566 0x1b80, 0x002411c7,
12151 0x1b80, 0x6e8411d5, 14567 0x1b80, 0xe3e711d5,
12152 0x1b80, 0x6e8411d7, 14568 0x1b80, 0xe3e711d7,
12153 0x1b80, 0x6f0f11e5, 14569 0x1b80, 0x000211e5,
12154 0x1b80, 0x6f0f11e7, 14570 0x1b80, 0x000211e7,
12155 0x1b80, 0xe31711f5, 14571 0x1b80, 0x54ea11f5,
12156 0x1b80, 0xe31711f7, 14572 0x1b80, 0x54ea11f7,
12157 0x1b80, 0xe34a1205, 14573 0x1b80, 0x0ba61205,
12158 0x1b80, 0xe34a1207, 14574 0x1b80, 0x0ba61207,
12159 0x1b80, 0x5c321215, 14575 0x1b80, 0x00241215,
12160 0x1b80, 0x5c321217, 14576 0x1b80, 0x00241217,
12161 0x1b80, 0x54eb1225, 14577 0x1b80, 0xe3e71225,
12162 0x1b80, 0x54eb1227, 14578 0x1b80, 0xe3e71227,
12163 0x1b80, 0x6ea41235, 14579 0x1b80, 0x00021235,
12164 0x1b80, 0x6ea41237, 14580 0x1b80, 0x00021237,
12165 0x1b80, 0xe3171245, 14581 0x1b80, 0x63431245,
12166 0x1b80, 0xe3171247, 14582 0x1b80, 0x63431247,
12167 0x1b80, 0xe34a1255, 14583 0x1b80, 0x30ec1255,
12168 0x1b80, 0xe34a1257, 14584 0x1b80, 0x30ec1257,
12169 0x1b80, 0x5c321265, 14585 0x1b80, 0x5c321265,
12170 0x1b80, 0x5c321267, 14586 0x1b80, 0x5c321267,
12171 0x1b80, 0x54ec1275, 14587 0x1b80, 0x54e61275,
12172 0x1b80, 0x54ec1277, 14588 0x1b80, 0x54e61277,
12173 0x1b80, 0x0bac1285, 14589 0x1b80, 0x6e101285,
12174 0x1b80, 0x0bac1287, 14590 0x1b80, 0x6e101287,
12175 0x1b80, 0x6ec41295, 14591 0x1b80, 0x6f0f1295,
12176 0x1b80, 0x6ec41297, 14592 0x1b80, 0x6f0f1297,
12177 0x1b80, 0x6f0f12a5, 14593 0x1b80, 0xe3b412a5,
12178 0x1b80, 0x6f0f12a7, 14594 0x1b80, 0xe3b412a7,
12179 0x1b80, 0xe31712b5, 14595 0x1b80, 0xe3e712b5,
12180 0x1b80, 0xe31712b7, 14596 0x1b80, 0xe3e712b7,
12181 0x1b80, 0xe34a12c5, 14597 0x1b80, 0x5c3212c5,
12182 0x1b80, 0xe34a12c7, 14598 0x1b80, 0x5c3212c7,
12183 0x1b80, 0x5c3212d5, 14599 0x1b80, 0x54e712d5,
12184 0x1b80, 0x5c3212d7, 14600 0x1b80, 0x54e712d7,
12185 0x1b80, 0x54ed12e5, 14601 0x1b80, 0x6e2412e5,
12186 0x1b80, 0x54ed12e7, 14602 0x1b80, 0x6e2412e7,
12187 0x1b80, 0x6ee412f5, 14603 0x1b80, 0xe3b412f5,
12188 0x1b80, 0x6ee412f7, 14604 0x1b80, 0xe3b412f7,
12189 0x1b80, 0xe3171305, 14605 0x1b80, 0xe3e71305,
12190 0x1b80, 0xe3171307, 14606 0x1b80, 0xe3e71307,
12191 0x1b80, 0xe34a1315, 14607 0x1b80, 0x5c321315,
12192 0x1b80, 0xe34a1317, 14608 0x1b80, 0x5c321317,
12193 0x1b80, 0x5c321325, 14609 0x1b80, 0x54e81325,
12194 0x1b80, 0x5c321327, 14610 0x1b80, 0x54e81327,
12195 0x1b80, 0x54ee1335, 14611 0x1b80, 0x6e441335,
12196 0x1b80, 0x54ee1337, 14612 0x1b80, 0x6e441337,
12197 0x1b80, 0x6ef41345, 14613 0x1b80, 0xe3b41345,
12198 0x1b80, 0x6ef41347, 14614 0x1b80, 0xe3b41347,
12199 0x1b80, 0xe3171355, 14615 0x1b80, 0xe3e71355,
12200 0x1b80, 0xe3171357, 14616 0x1b80, 0xe3e71357,
12201 0x1b80, 0xe34a1365, 14617 0x1b80, 0x5c321365,
12202 0x1b80, 0xe34a1367, 14618 0x1b80, 0x5c321367,
12203 0x1b80, 0x5c321375, 14619 0x1b80, 0x54e91375,
12204 0x1b80, 0x5c321377, 14620 0x1b80, 0x54e91377,
12205 0x1b80, 0x54ef1385, 14621 0x1b80, 0x6e641385,
12206 0x1b80, 0x54ef1387, 14622 0x1b80, 0x6e641387,
12207 0x1b80, 0x6e0c1395, 14623 0x1b80, 0xe3b41395,
12208 0x1b80, 0x6e0c1397, 14624 0x1b80, 0xe3b41397,
12209 0x1b80, 0x6f0013a5, 14625 0x1b80, 0xe3e713a5,
12210 0x1b80, 0x6f0013a7, 14626 0x1b80, 0xe3e713a7,
12211 0x1b80, 0xe31713b5, 14627 0x1b80, 0x5c3213b5,
12212 0x1b80, 0xe31713b7, 14628 0x1b80, 0x5c3213b7,
12213 0x1b80, 0xe34a13c5, 14629 0x1b80, 0x54ea13c5,
12214 0x1b80, 0xe34a13c7, 14630 0x1b80, 0x54ea13c7,
12215 0x1b80, 0x5c3213d5, 14631 0x1b80, 0x0baa13d5,
12216 0x1b80, 0x5c3213d7, 14632 0x1b80, 0x0baa13d7,
12217 0x1b80, 0x54f013e5, 14633 0x1b80, 0x6e8413e5,
12218 0x1b80, 0x54f013e7, 14634 0x1b80, 0x6e8413e7,
12219 0x1b80, 0x6e1c13f5, 14635 0x1b80, 0x6f0f13f5,
12220 0x1b80, 0x6e1c13f7, 14636 0x1b80, 0x6f0f13f7,
12221 0x1b80, 0xe3171405, 14637 0x1b80, 0xe3b41405,
12222 0x1b80, 0xe3171407, 14638 0x1b80, 0xe3b41407,
12223 0x1b80, 0xe34a1415, 14639 0x1b80, 0xe3e71415,
12224 0x1b80, 0xe34a1417, 14640 0x1b80, 0xe3e71417,
12225 0x1b80, 0x5c321425, 14641 0x1b80, 0x5c321425,
12226 0x1b80, 0x5c321427, 14642 0x1b80, 0x5c321427,
12227 0x1b80, 0x54f11435, 14643 0x1b80, 0x54eb1435,
12228 0x1b80, 0x54f11437, 14644 0x1b80, 0x54eb1437,
12229 0x1b80, 0x6e3c1445, 14645 0x1b80, 0x6ea41445,
12230 0x1b80, 0x6e3c1447, 14646 0x1b80, 0x6ea41447,
12231 0x1b80, 0xe3171455, 14647 0x1b80, 0xe3b41455,
12232 0x1b80, 0xe3171457, 14648 0x1b80, 0xe3b41457,
12233 0x1b80, 0xe34a1465, 14649 0x1b80, 0xe3e71465,
12234 0x1b80, 0xe34a1467, 14650 0x1b80, 0xe3e71467,
12235 0x1b80, 0xfaa91475, 14651 0x1b80, 0x5c321475,
12236 0x1b80, 0xfaa91477, 14652 0x1b80, 0x5c321477,
12237 0x1b80, 0x5c321485, 14653 0x1b80, 0x54ec1485,
12238 0x1b80, 0x5c321487, 14654 0x1b80, 0x54ec1487,
12239 0x1b80, 0x54f21495, 14655 0x1b80, 0x0bac1495,
12240 0x1b80, 0x54f21497, 14656 0x1b80, 0x0bac1497,
12241 0x1b80, 0x6e5c14a5, 14657 0x1b80, 0x6ec414a5,
12242 0x1b80, 0x6e5c14a7, 14658 0x1b80, 0x6ec414a7,
12243 0x1b80, 0xe31714b5, 14659 0x1b80, 0x6f0f14b5,
12244 0x1b80, 0xe31714b7, 14660 0x1b80, 0x6f0f14b7,
12245 0x1b80, 0xe34a14c5, 14661 0x1b80, 0xe3b414c5,
12246 0x1b80, 0xe34a14c7, 14662 0x1b80, 0xe3b414c7,
12247 0x1b80, 0x5c3214d5, 14663 0x1b80, 0xe3e714d5,
12248 0x1b80, 0x5c3214d7, 14664 0x1b80, 0xe3e714d7,
12249 0x1b80, 0x54f314e5, 14665 0x1b80, 0x5c3214e5,
12250 0x1b80, 0x54f314e7, 14666 0x1b80, 0x5c3214e7,
12251 0x1b80, 0x6e7c14f5, 14667 0x1b80, 0x54ed14f5,
12252 0x1b80, 0x6e7c14f7, 14668 0x1b80, 0x54ed14f7,
12253 0x1b80, 0xe3171505, 14669 0x1b80, 0x6ee41505,
12254 0x1b80, 0xe3171507, 14670 0x1b80, 0x6ee41507,
12255 0x1b80, 0xe34a1515, 14671 0x1b80, 0xe3b41515,
12256 0x1b80, 0xe34a1517, 14672 0x1b80, 0xe3b41517,
12257 0x1b80, 0xfba91525, 14673 0x1b80, 0xe3e71525,
12258 0x1b80, 0xfba91527, 14674 0x1b80, 0xe3e71527,
12259 0x1b80, 0x5c321535, 14675 0x1b80, 0x5c321535,
12260 0x1b80, 0x5c321537, 14676 0x1b80, 0x5c321537,
12261 0x1b80, 0x54f41545, 14677 0x1b80, 0x54ee1545,
12262 0x1b80, 0x54f41547, 14678 0x1b80, 0x54ee1547,
12263 0x1b80, 0x6e9c1555, 14679 0x1b80, 0x6ef41555,
12264 0x1b80, 0x6e9c1557, 14680 0x1b80, 0x6ef41557,
12265 0x1b80, 0xe3171565, 14681 0x1b80, 0xe3b41565,
12266 0x1b80, 0xe3171567, 14682 0x1b80, 0xe3b41567,
12267 0x1b80, 0xe34a1575, 14683 0x1b80, 0xe3e71575,
12268 0x1b80, 0xe34a1577, 14684 0x1b80, 0xe3e71577,
12269 0x1b80, 0x5c321585, 14685 0x1b80, 0x5c321585,
12270 0x1b80, 0x5c321587, 14686 0x1b80, 0x5c321587,
12271 0x1b80, 0x54f51595, 14687 0x1b80, 0x54ef1595,
12272 0x1b80, 0x54f51597, 14688 0x1b80, 0x54ef1597,
12273 0x1b80, 0x6ebc15a5, 14689 0x1b80, 0x6e0c15a5,
12274 0x1b80, 0x6ebc15a7, 14690 0x1b80, 0x6e0c15a7,
12275 0x1b80, 0xe31715b5, 14691 0x1b80, 0x6f0015b5,
12276 0x1b80, 0xe31715b7, 14692 0x1b80, 0x6f0015b7,
12277 0x1b80, 0xe34a15c5, 14693 0x1b80, 0xe3b415c5,
12278 0x1b80, 0xe34a15c7, 14694 0x1b80, 0xe3b415c7,
12279 0x1b80, 0x5c3215d5, 14695 0x1b80, 0xe3e715d5,
12280 0x1b80, 0x5c3215d7, 14696 0x1b80, 0xe3e715d7,
12281 0x1b80, 0x54f615e5, 14697 0x1b80, 0x5c3215e5,
12282 0x1b80, 0x54f615e7, 14698 0x1b80, 0x5c3215e7,
12283 0x1b80, 0x6edc15f5, 14699 0x1b80, 0x54f015f5,
12284 0x1b80, 0x6edc15f7, 14700 0x1b80, 0x54f015f7,
12285 0x1b80, 0xe3171605, 14701 0x1b80, 0x6e1c1605,
12286 0x1b80, 0xe3171607, 14702 0x1b80, 0x6e1c1607,
12287 0x1b80, 0xe34a1615, 14703 0x1b80, 0xe3b41615,
12288 0x1b80, 0xe34a1617, 14704 0x1b80, 0xe3b41617,
12289 0x1b80, 0x5c321625, 14705 0x1b80, 0xe3e71625,
12290 0x1b80, 0x5c321627, 14706 0x1b80, 0xe3e71627,
12291 0x1b80, 0x54f71635, 14707 0x1b80, 0x5c321635,
12292 0x1b80, 0x54f71637, 14708 0x1b80, 0x5c321637,
12293 0x1b80, 0x6ef01645, 14709 0x1b80, 0x54f11645,
12294 0x1b80, 0x6ef01647, 14710 0x1b80, 0x54f11647,
12295 0x1b80, 0xe3171655, 14711 0x1b80, 0x6e3c1655,
12296 0x1b80, 0xe3171657, 14712 0x1b80, 0x6e3c1657,
12297 0x1b80, 0xe34a1665, 14713 0x1b80, 0xe3b41665,
12298 0x1b80, 0xe34a1667, 14714 0x1b80, 0xe3b41667,
12299 0x1b80, 0x63831675, 14715 0x1b80, 0xe3e71675,
12300 0x1b80, 0x63831677, 14716 0x1b80, 0xe3e71677,
12301 0x1b80, 0x30d91685, 14717 0x1b80, 0xfaa91685,
12302 0x1b80, 0x30d91687, 14718 0x1b80, 0xfaa91687,
12303 0x1b80, 0x00011695, 14719 0x1b80, 0x5c321695,
12304 0x1b80, 0x00011697, 14720 0x1b80, 0x5c321697,
12305 0x1b80, 0x000416a5, 14721 0x1b80, 0x54f216a5,
12306 0x1b80, 0x000416a7, 14722 0x1b80, 0x54f216a7,
12307 0x1b80, 0x550116b5, 14723 0x1b80, 0x6e5c16b5,
12308 0x1b80, 0x550116b7, 14724 0x1b80, 0x6e5c16b7,
12309 0x1b80, 0x5c3116c5, 14725 0x1b80, 0xe3b416c5,
12310 0x1b80, 0x5c3116c7, 14726 0x1b80, 0xe3b416c7,
12311 0x1b80, 0x5f8216d5, 14727 0x1b80, 0xe3e716d5,
12312 0x1b80, 0x5f8216d7, 14728 0x1b80, 0xe3e716d7,
12313 0x1b80, 0x660516e5, 14729 0x1b80, 0x5c3216e5,
12314 0x1b80, 0x660516e7, 14730 0x1b80, 0x5c3216e7,
12315 0x1b80, 0x000616f5, 14731 0x1b80, 0x54f316f5,
12316 0x1b80, 0x000616f7, 14732 0x1b80, 0x54f316f7,
12317 0x1b80, 0x5d801705, 14733 0x1b80, 0x6e7c1705,
12318 0x1b80, 0x5d801707, 14734 0x1b80, 0x6e7c1707,
12319 0x1b80, 0x09001715, 14735 0x1b80, 0xe3b41715,
12320 0x1b80, 0x09001717, 14736 0x1b80, 0xe3b41717,
12321 0x1b80, 0x0a011725, 14737 0x1b80, 0xe3e71725,
12322 0x1b80, 0x0a011727, 14738 0x1b80, 0xe3e71727,
12323 0x1b80, 0x0b401735, 14739 0x1b80, 0xfba91735,
12324 0x1b80, 0x0b401737, 14740 0x1b80, 0xfba91737,
12325 0x1b80, 0x0d001745, 14741 0x1b80, 0x5c321745,
12326 0x1b80, 0x0d001747, 14742 0x1b80, 0x5c321747,
12327 0x1b80, 0x0f011755, 14743 0x1b80, 0x54f41755,
12328 0x1b80, 0x0f011757, 14744 0x1b80, 0x54f41757,
12329 0x1b80, 0x002a1765, 14745 0x1b80, 0x6e9c1765,
12330 0x1b80, 0x002a1767, 14746 0x1b80, 0x6e9c1767,
12331 0x1b80, 0x055a1775, 14747 0x1b80, 0xe3b41775,
12332 0x1b80, 0x055a1777, 14748 0x1b80, 0xe3b41777,
12333 0x1b80, 0x05db1785, 14749 0x1b80, 0xe3e71785,
12334 0x1b80, 0x05db1787, 14750 0x1b80, 0xe3e71787,
12335 0x1b80, 0xe3351795, 14751 0x1b80, 0x5c321795,
12336 0x1b80, 0xe3351797, 14752 0x1b80, 0x5c321797,
12337 0x1b80, 0xe2e317a5, 14753 0x1b80, 0x54f517a5,
12338 0x1b80, 0xe2e317a7, 14754 0x1b80, 0x54f517a7,
12339 0x1b80, 0x000617b5, 14755 0x1b80, 0x6ebc17b5,
12340 0x1b80, 0x000617b7, 14756 0x1b80, 0x6ebc17b7,
12341 0x1b80, 0x06da17c5, 14757 0x1b80, 0xe3b417c5,
12342 0x1b80, 0x06da17c7, 14758 0x1b80, 0xe3b417c7,
12343 0x1b80, 0x07db17d5, 14759 0x1b80, 0xe3e717d5,
12344 0x1b80, 0x07db17d7, 14760 0x1b80, 0xe3e717d7,
12345 0x1b80, 0xe33517e5, 14761 0x1b80, 0x5c3217e5,
12346 0x1b80, 0xe33517e7, 14762 0x1b80, 0x5c3217e7,
12347 0x1b80, 0xe2e317f5, 14763 0x1b80, 0x54f617f5,
12348 0x1b80, 0xe2e317f7, 14764 0x1b80, 0x54f617f7,
12349 0x1b80, 0xe32c1805, 14765 0x1b80, 0x6edc1805,
12350 0x1b80, 0xe32c1807, 14766 0x1b80, 0x6edc1807,
12351 0x1b80, 0x00021815, 14767 0x1b80, 0xe3b41815,
12352 0x1b80, 0x00021817, 14768 0x1b80, 0xe3b41817,
12353 0x1b80, 0xe3311825, 14769 0x1b80, 0xe3e71825,
12354 0x1b80, 0xe3311827, 14770 0x1b80, 0xe3e71827,
12355 0x1b80, 0x5d001835, 14771 0x1b80, 0x5c321835,
12356 0x1b80, 0x5d001837, 14772 0x1b80, 0x5c321837,
12357 0x1b80, 0x00041845, 14773 0x1b80, 0x54f71845,
12358 0x1b80, 0x00041847, 14774 0x1b80, 0x54f71847,
12359 0x1b80, 0x5fa21855, 14775 0x1b80, 0x6ef01855,
12360 0x1b80, 0x5fa21857, 14776 0x1b80, 0x6ef01857,
12361 0x1b80, 0x00011865, 14777 0x1b80, 0xe3b41865,
12362 0x1b80, 0x00011867, 14778 0x1b80, 0xe3b41867,
12363 0x1b80, 0xe2571875, 14779 0x1b80, 0xe3e71875,
12364 0x1b80, 0xe2571877, 14780 0x1b80, 0xe3e71877,
12365 0x1b80, 0x74081885, 14781 0x1b80, 0x63431885,
12366 0x1b80, 0x74081887, 14782 0x1b80, 0x63431887,
12367 0x1b80, 0xe2a11895, 14783 0x1b80, 0x30ec1895,
12368 0x1b80, 0xe2a11897, 14784 0x1b80, 0x30ec1897,
12369 0x1b80, 0xe28318a5, 14785 0x1b80, 0x000118a5,
12370 0x1b80, 0xe28318a7, 14786 0x1b80, 0x000118a7,
12371 0x1b80, 0xe2c118b5, 14787 0x1b80, 0x63c318b5,
12372 0x1b80, 0xe2c118b7, 14788 0x1b80, 0x63c318b7,
12373 0x1b80, 0xb90018c5, 14789 0x1b80, 0x003018c5,
12374 0x1b80, 0xb90018c7, 14790 0x1b80, 0x003018c7,
12375 0x1b80, 0x990018d5, 14791 0x1b80, 0x000018d5,
12376 0x1b80, 0x990018d7, 14792 0x1b80, 0x000018d7,
12377 0x1b80, 0x000618e5, 14793 0x1b80, 0x000218e5,
12378 0x1b80, 0x000618e7, 14794 0x1b80, 0x000218e7,
12379 0x1b80, 0x770018f5, 14795 0x1b80, 0x550118f5,
12380 0x1b80, 0x770018f7, 14796 0x1b80, 0x550118f7,
12381 0x1b80, 0x00041905, 14797 0x1b80, 0x57041905,
12382 0x1b80, 0x00041907, 14798 0x1b80, 0x57041907,
12383 0x1b80, 0x49041915, 14799 0x1b80, 0x57001915,
12384 0x1b80, 0x49041917, 14800 0x1b80, 0x57001917,
12385 0x1b80, 0x4bb01925, 14801 0x1b80, 0x96001925,
12386 0x1b80, 0x4bb01927, 14802 0x1b80, 0x96001927,
12387 0x1b80, 0x00061935, 14803 0x1b80, 0x00301935,
12388 0x1b80, 0x00061937, 14804 0x1b80, 0x00301937,
12389 0x1b80, 0x75041945, 14805 0x1b80, 0x00071945,
12390 0x1b80, 0x75041947, 14806 0x1b80, 0x00071947,
12391 0x1b80, 0x77081955, 14807 0x1b80, 0x5be01955,
12392 0x1b80, 0x77081957, 14808 0x1b80, 0x5be01957,
12393 0x1b80, 0x00071965, 14809 0x1b80, 0x5a001965,
12394 0x1b80, 0x00071967, 14810 0x1b80, 0x5a001967,
12395 0x1b80, 0x77101975, 14811 0x1b80, 0x59001975,
12396 0x1b80, 0x77101977, 14812 0x1b80, 0x59001977,
12397 0x1b80, 0x00041985, 14813 0x1b80, 0x58001985,
12398 0x1b80, 0x00041987, 14814 0x1b80, 0x58001987,
12399 0x1b80, 0x44801995, 14815 0x1b80, 0x00041995,
12400 0x1b80, 0x44801997, 14816 0x1b80, 0x00041997,
12401 0x1b80, 0x45ff19a5, 14817 0x1b80, 0x000219a5,
12402 0x1b80, 0x45ff19a7, 14818 0x1b80, 0x000219a7,
12403 0x1b80, 0x463f19b5, 14819 0x1b80, 0x570819b5,
12404 0x1b80, 0x463f19b7, 14820 0x1b80, 0x570819b7,
12405 0x1b80, 0x473119c5, 14821 0x1b80, 0x570019c5,
12406 0x1b80, 0x473119c7, 14822 0x1b80, 0x570019c7,
12407 0x1b80, 0x400819d5, 14823 0x1b80, 0x950019d5,
12408 0x1b80, 0x400819d7, 14824 0x1b80, 0x950019d7,
12409 0x1b80, 0xe23e19e5, 14825 0x1b80, 0x003019e5,
12410 0x1b80, 0xe23e19e7, 14826 0x1b80, 0x003019e7,
12411 0x1b80, 0x000119f5, 14827 0x1b80, 0x000719f5,
12412 0x1b80, 0x000119f7, 14828 0x1b80, 0x000719f7,
12413 0x1b80, 0xe2571a05, 14829 0x1b80, 0x58011a05,
12414 0x1b80, 0xe2571a07, 14830 0x1b80, 0x58011a07,
12415 0x1b80, 0x74081a15, 14831 0x1b80, 0x00041a15,
12416 0x1b80, 0x74081a17, 14832 0x1b80, 0x00041a17,
12417 0x1b80, 0xe2b11a25, 14833 0x1b80, 0x00021a25,
12418 0x1b80, 0xe2b11a27, 14834 0x1b80, 0x00021a27,
12419 0x1b80, 0xe2831a35, 14835 0x1b80, 0x00301a35,
12420 0x1b80, 0xe2831a37, 14836 0x1b80, 0x00301a37,
12421 0x1b80, 0xe2c71a45, 14837 0x1b80, 0x00001a45,
12422 0x1b80, 0xe2c71a47, 14838 0x1b80, 0x00001a47,
12423 0x1b80, 0xb9001a55, 14839 0x1b80, 0x00021a55,
12424 0x1b80, 0xb9001a57, 14840 0x1b80, 0x00021a57,
12425 0x1b80, 0x99001a65, 14841 0x1b80, 0x63051a65,
12426 0x1b80, 0x99001a67, 14842 0x1b80, 0x63051a67,
12427 0x1b80, 0x00061a75, 14843 0x1b80, 0x7b401a75,
12428 0x1b80, 0x00061a77, 14844 0x1b80, 0x7b401a77,
12429 0x1b80, 0x77001a85, 14845 0x1b80, 0x7a001a85,
12430 0x1b80, 0x77001a87, 14846 0x1b80, 0x7a001a87,
12431 0x1b80, 0x00051a95, 14847 0x1b80, 0x79001a95,
12432 0x1b80, 0x00051a97, 14848 0x1b80, 0x79001a97,
12433 0x1b80, 0x61041aa5, 14849 0x1b80, 0x7f401aa5,
12434 0x1b80, 0x61041aa7, 14850 0x1b80, 0x7f401aa7,
12435 0x1b80, 0x63b01ab5, 14851 0x1b80, 0x7e001ab5,
12436 0x1b80, 0x63b01ab7, 14852 0x1b80, 0x7e001ab7,
12437 0x1b80, 0x00061ac5, 14853 0x1b80, 0x7d001ac5,
12438 0x1b80, 0x00061ac7, 14854 0x1b80, 0x7d001ac7,
12439 0x1b80, 0x75081ad5, 14855 0x1b80, 0x00011ad5,
12440 0x1b80, 0x75081ad7, 14856 0x1b80, 0x00011ad7,
12441 0x1b80, 0x77081ae5, 14857 0x1b80, 0x00041ae5,
12442 0x1b80, 0x77081ae7, 14858 0x1b80, 0x00041ae7,
12443 0x1b80, 0x00071af5, 14859 0x1b80, 0x55011af5,
12444 0x1b80, 0x00071af7, 14860 0x1b80, 0x55011af7,
12445 0x1b80, 0x77201b05, 14861 0x1b80, 0x5c311b05,
12446 0x1b80, 0x77201b07, 14862 0x1b80, 0x5c311b07,
12447 0x1b80, 0x00051b15, 14863 0x1b80, 0x5f821b15,
12448 0x1b80, 0x00051b17, 14864 0x1b80, 0x5f821b17,
12449 0x1b80, 0x5c801b25, 14865 0x1b80, 0x66051b25,
12450 0x1b80, 0x5c801b27, 14866 0x1b80, 0x66051b27,
12451 0x1b80, 0x5dff1b35, 14867 0x1b80, 0x00061b35,
12452 0x1b80, 0x5dff1b37, 14868 0x1b80, 0x00061b37,
12453 0x1b80, 0x5e3f1b45, 14869 0x1b80, 0x5d801b45,
12454 0x1b80, 0x5e3f1b47, 14870 0x1b80, 0x5d801b47,
12455 0x1b80, 0x5f311b55, 14871 0x1b80, 0x09001b55,
12456 0x1b80, 0x5f311b57, 14872 0x1b80, 0x09001b57,
12457 0x1b80, 0x00041b65, 14873 0x1b80, 0x0a011b65,
12458 0x1b80, 0x00041b67, 14874 0x1b80, 0x0a011b67,
12459 0x1b80, 0x400a1b75, 14875 0x1b80, 0x0b401b75,
12460 0x1b80, 0x400a1b77, 14876 0x1b80, 0x0b401b77,
12461 0x1b80, 0xe23e1b85, 14877 0x1b80, 0x0d001b85,
12462 0x1b80, 0xe23e1b87, 14878 0x1b80, 0x0d001b87,
12463 0x1b80, 0x00011b95, 14879 0x1b80, 0x0f011b95,
12464 0x1b80, 0x00011b97, 14880 0x1b80, 0x0f011b97,
12465 0x1b80, 0xe2571ba5, 14881 0x1b80, 0x002a1ba5,
12466 0x1b80, 0xe2571ba7, 14882 0x1b80, 0x002a1ba7,
12467 0x1b80, 0x74081bb5, 14883 0x1b80, 0x055a1bb5,
12468 0x1b80, 0x74081bb7, 14884 0x1b80, 0x055a1bb7,
12469 0x1b80, 0xe2a11bc5, 14885 0x1b80, 0x05db1bc5,
12470 0x1b80, 0xe2a11bc7, 14886 0x1b80, 0x05db1bc7,
12471 0x1b80, 0xe2831bd5, 14887 0x1b80, 0xe3d21bd5,
12472 0x1b80, 0xe2831bd7, 14888 0x1b80, 0xe3d21bd7,
12473 0x1b80, 0xe2c11be5, 14889 0x1b80, 0xe3801be5,
12474 0x1b80, 0xe2c11be7, 14890 0x1b80, 0xe3801be7,
12475 0x1b80, 0xe2cd1bf5, 14891 0x1b80, 0x00061bf5,
12476 0x1b80, 0xe2cd1bf7, 14892 0x1b80, 0x00061bf7,
12477 0x1b80, 0xe2101c05, 14893 0x1b80, 0x06da1c05,
12478 0x1b80, 0xe2101c07, 14894 0x1b80, 0x06da1c07,
12479 0x1b80, 0x00011c15, 14895 0x1b80, 0x07db1c15,
12480 0x1b80, 0x00011c17, 14896 0x1b80, 0x07db1c17,
12481 0x1b80, 0xe2571c25, 14897 0x1b80, 0xe3d21c25,
12482 0x1b80, 0xe2571c27, 14898 0x1b80, 0xe3d21c27,
12483 0x1b80, 0x74081c35, 14899 0x1b80, 0xe3801c35,
12484 0x1b80, 0x74081c37, 14900 0x1b80, 0xe3801c37,
12485 0x1b80, 0xe2b11c45, 14901 0x1b80, 0xe3c91c45,
12486 0x1b80, 0xe2b11c47, 14902 0x1b80, 0xe3c91c47,
12487 0x1b80, 0xe2831c55, 14903 0x1b80, 0x00021c55,
12488 0x1b80, 0xe2831c57, 14904 0x1b80, 0x00021c57,
12489 0x1b80, 0xe2c71c65, 14905 0x1b80, 0xe3ce1c65,
12490 0x1b80, 0xe2c71c67, 14906 0x1b80, 0xe3ce1c67,
12491 0x1b80, 0xe2cd1c75, 14907 0x1b80, 0x5d001c75,
12492 0x1b80, 0xe2cd1c77, 14908 0x1b80, 0x5d001c77,
12493 0x1b80, 0xe2261c85, 14909 0x1b80, 0x00041c85,
12494 0x1b80, 0xe2261c87, 14910 0x1b80, 0x00041c87,
12495 0x1b80, 0x00011c95, 14911 0x1b80, 0x5fa21c95,
12496 0x1b80, 0x00011c97, 14912 0x1b80, 0x5fa21c97,
12497 0x1b80, 0xe26d1ca5, 14913 0x1b80, 0x00011ca5,
12498 0x1b80, 0xe26d1ca7, 14914 0x1b80, 0x00011ca7,
12499 0x1b80, 0x74001cb5, 14915 0x1b80, 0x00041cb5,
12500 0x1b80, 0x74001cb7, 14916 0x1b80, 0x00041cb7,
12501 0x1b80, 0xe2a11cc5, 14917 0x1b80, 0xe2711cc5,
12502 0x1b80, 0xe2a11cc7, 14918 0x1b80, 0xe2711cc7,
12503 0x1b80, 0xe2921cd5, 14919 0x1b80, 0xe2821cd5,
12504 0x1b80, 0xe2921cd7, 14920 0x1b80, 0xe2821cd7,
12505 0x1b80, 0xe2c11ce5, 14921 0x1b80, 0xe28b1ce5,
12506 0x1b80, 0xe2c11ce7, 14922 0x1b80, 0xe28b1ce7,
12507 0x1b80, 0xe2cd1cf5, 14923 0x1b80, 0xe29c1cf5,
12508 0x1b80, 0xe2cd1cf7, 14924 0x1b80, 0xe29c1cf7,
12509 0x1b80, 0xe2101d05, 14925 0x1b80, 0x00051d05,
12510 0x1b80, 0xe2101d07, 14926 0x1b80, 0x00051d07,
12511 0x1b80, 0x00011d15, 14927 0x1b80, 0xe2641d15,
12512 0x1b80, 0x00011d17, 14928 0x1b80, 0xe2641d17,
12513 0x1b80, 0xe26d1d25, 14929 0x1b80, 0xe2711d25,
12514 0x1b80, 0xe26d1d27, 14930 0x1b80, 0xe2711d27,
12515 0x1b80, 0x74001d35, 14931 0x1b80, 0xe28b1d35,
12516 0x1b80, 0x74001d37, 14932 0x1b80, 0xe28b1d37,
12517 0x1b80, 0xe2b11d45, 14933 0x1b80, 0xe29c1d45,
12518 0x1b80, 0xe2b11d47, 14934 0x1b80, 0xe29c1d47,
12519 0x1b80, 0xe2921d55, 14935 0x1b80, 0x00061d55,
12520 0x1b80, 0xe2921d57, 14936 0x1b80, 0x00061d57,
12521 0x1b80, 0xe2c71d65, 14937 0x1b80, 0xe2641d65,
12522 0x1b80, 0xe2c71d67, 14938 0x1b80, 0xe2641d67,
12523 0x1b80, 0xe2cd1d75, 14939 0x1b80, 0xe2711d75,
12524 0x1b80, 0xe2cd1d77, 14940 0x1b80, 0xe2711d77,
12525 0x1b80, 0xe2261d85, 14941 0x1b80, 0xe2821d85,
12526 0x1b80, 0xe2261d87, 14942 0x1b80, 0xe2821d87,
12527 0x1b80, 0x00011d95, 14943 0x1b80, 0xe28b1d95,
12528 0x1b80, 0x00011d97, 14944 0x1b80, 0xe28b1d97,
12529 0x1b80, 0x00041da5, 14945 0x1b80, 0x00011da5,
12530 0x1b80, 0x00041da7, 14946 0x1b80, 0x00011da7,
12531 0x1b80, 0x445b1db5, 14947 0x1b80, 0xe2f41db5,
12532 0x1b80, 0x445b1db7, 14948 0x1b80, 0xe2f41db7,
12533 0x1b80, 0x47b01dc5, 14949 0x1b80, 0x74081dc5,
12534 0x1b80, 0x47b01dc7, 14950 0x1b80, 0x74081dc7,
12535 0x1b80, 0x47301dd5, 14951 0x1b80, 0xe33e1dd5,
12536 0x1b80, 0x47301dd7, 14952 0x1b80, 0xe33e1dd7,
12537 0x1b80, 0x47001de5, 14953 0x1b80, 0xe3201de5,
12538 0x1b80, 0x47001de7, 14954 0x1b80, 0xe3201de7,
12539 0x1b80, 0x00061df5, 14955 0x1b80, 0xe35e1df5,
12540 0x1b80, 0x00061df7, 14956 0x1b80, 0xe35e1df7,
12541 0x1b80, 0x77081e05, 14957 0x1b80, 0xb9001e05,
12542 0x1b80, 0x77081e07, 14958 0x1b80, 0xb9001e07,
12543 0x1b80, 0x00041e15, 14959 0x1b80, 0x99001e15,
12544 0x1b80, 0x00041e17, 14960 0x1b80, 0x99001e17,
12545 0x1b80, 0x49401e25, 14961 0x1b80, 0x00061e25,
12546 0x1b80, 0x49401e27, 14962 0x1b80, 0x00061e27,
12547 0x1b80, 0x4bb01e35, 14963 0x1b80, 0x77001e35,
12548 0x1b80, 0x4bb01e37, 14964 0x1b80, 0x77001e37,
12549 0x1b80, 0x00071e45, 14965 0x1b80, 0x00041e45,
12550 0x1b80, 0x00071e47, 14966 0x1b80, 0x00041e47,
12551 0x1b80, 0x54401e55, 14967 0x1b80, 0x49041e55,
12552 0x1b80, 0x54401e57, 14968 0x1b80, 0x49041e57,
12553 0x1b80, 0x00041e65, 14969 0x1b80, 0x4bb01e65,
12554 0x1b80, 0x00041e67, 14970 0x1b80, 0x4bb01e67,
12555 0x1b80, 0x40081e75, 14971 0x1b80, 0x00061e75,
12556 0x1b80, 0x40081e77, 14972 0x1b80, 0x00061e77,
12557 0x1b80, 0x00011e85, 14973 0x1b80, 0x75041e85,
12558 0x1b80, 0x00011e87, 14974 0x1b80, 0x75041e87,
12559 0x1b80, 0x00051e95, 14975 0x1b80, 0x77081e95,
12560 0x1b80, 0x00051e97, 14976 0x1b80, 0x77081e97,
12561 0x1b80, 0x5c5b1ea5, 14977 0x1b80, 0x00071ea5,
12562 0x1b80, 0x5c5b1ea7, 14978 0x1b80, 0x00071ea7,
12563 0x1b80, 0x5fb01eb5, 14979 0x1b80, 0x77101eb5,
12564 0x1b80, 0x5fb01eb7, 14980 0x1b80, 0x77101eb7,
12565 0x1b80, 0x5f301ec5, 14981 0x1b80, 0x00041ec5,
12566 0x1b80, 0x5f301ec7, 14982 0x1b80, 0x00041ec7,
12567 0x1b80, 0x5f001ed5, 14983 0x1b80, 0x44801ed5,
12568 0x1b80, 0x5f001ed7, 14984 0x1b80, 0x44801ed7,
12569 0x1b80, 0x00061ee5, 14985 0x1b80, 0x45ff1ee5,
12570 0x1b80, 0x00061ee7, 14986 0x1b80, 0x45ff1ee7,
12571 0x1b80, 0x77081ef5, 14987 0x1b80, 0x463f1ef5,
12572 0x1b80, 0x77081ef7, 14988 0x1b80, 0x463f1ef7,
12573 0x1b80, 0x00051f05, 14989 0x1b80, 0x47311f05,
12574 0x1b80, 0x00051f07, 14990 0x1b80, 0x47311f07,
12575 0x1b80, 0x61401f15, 14991 0x1b80, 0x40081f15,
12576 0x1b80, 0x61401f17, 14992 0x1b80, 0x40081f17,
12577 0x1b80, 0x63b01f25, 14993 0x1b80, 0xe2db1f25,
12578 0x1b80, 0x63b01f27, 14994 0x1b80, 0xe2db1f27,
12579 0x1b80, 0x00071f35, 14995 0x1b80, 0x00011f35,
12580 0x1b80, 0x00071f37, 14996 0x1b80, 0x00011f37,
12581 0x1b80, 0x54401f45, 14997 0x1b80, 0xe2f41f45,
12582 0x1b80, 0x54401f47, 14998 0x1b80, 0xe2f41f47,
12583 0x1b80, 0x00041f55, 14999 0x1b80, 0x74081f55,
12584 0x1b80, 0x00041f57, 15000 0x1b80, 0x74081f57,
12585 0x1b80, 0x40081f65, 15001 0x1b80, 0xe34e1f65,
12586 0x1b80, 0x40081f67, 15002 0x1b80, 0xe34e1f67,
12587 0x1b80, 0x00011f75, 15003 0x1b80, 0xe3201f75,
12588 0x1b80, 0x00011f77, 15004 0x1b80, 0xe3201f77,
12589 0x1b80, 0xe2571f85, 15005 0x1b80, 0xe3641f85,
12590 0x1b80, 0xe2571f87, 15006 0x1b80, 0xe3641f87,
12591 0x1b80, 0x74081f95, 15007 0x1b80, 0xb9001f95,
12592 0x1b80, 0x74081f97, 15008 0x1b80, 0xb9001f97,
12593 0x1b80, 0xe2a11fa5, 15009 0x1b80, 0x99001fa5,
12594 0x1b80, 0xe2a11fa7, 15010 0x1b80, 0x99001fa7,
12595 0x1b80, 0x00041fb5, 15011 0x1b80, 0x00061fb5,
12596 0x1b80, 0x00041fb7, 15012 0x1b80, 0x00061fb7,
12597 0x1b80, 0x40081fc5, 15013 0x1b80, 0x77001fc5,
12598 0x1b80, 0x40081fc7, 15014 0x1b80, 0x77001fc7,
12599 0x1b80, 0x00011fd5, 15015 0x1b80, 0x00051fd5,
12600 0x1b80, 0x00011fd7, 15016 0x1b80, 0x00051fd7,
12601 0x1b80, 0xe2571fe5, 15017 0x1b80, 0x61041fe5,
12602 0x1b80, 0xe2571fe7, 15018 0x1b80, 0x61041fe7,
12603 0x1b80, 0x74081ff5, 15019 0x1b80, 0x63b01ff5,
12604 0x1b80, 0x74081ff7, 15020 0x1b80, 0x63b01ff7,
12605 0x1b80, 0xe2b12005, 15021 0x1b80, 0x00062005,
12606 0x1b80, 0xe2b12007, 15022 0x1b80, 0x00062007,
12607 0x1b80, 0x00042015, 15023 0x1b80, 0x75082015,
12608 0x1b80, 0x00042017, 15024 0x1b80, 0x75082017,
12609 0x1b80, 0x40082025, 15025 0x1b80, 0x77082025,
12610 0x1b80, 0x40082027, 15026 0x1b80, 0x77082027,
12611 0x1b80, 0x00012035, 15027 0x1b80, 0x00072035,
12612 0x1b80, 0x00012037, 15028 0x1b80, 0x00072037,
12613 0x1b80, 0xe26d2045, 15029 0x1b80, 0x77202045,
12614 0x1b80, 0xe26d2047, 15030 0x1b80, 0x77202047,
12615 0x1b80, 0x74002055, 15031 0x1b80, 0x00052055,
12616 0x1b80, 0x74002057, 15032 0x1b80, 0x00052057,
12617 0x1b80, 0xe2a12065, 15033 0x1b80, 0x5c802065,
12618 0x1b80, 0xe2a12067, 15034 0x1b80, 0x5c802067,
12619 0x1b80, 0x00042075, 15035 0x1b80, 0x5dff2075,
12620 0x1b80, 0x00042077, 15036 0x1b80, 0x5dff2077,
12621 0x1b80, 0x40082085, 15037 0x1b80, 0x5e3f2085,
12622 0x1b80, 0x40082087, 15038 0x1b80, 0x5e3f2087,
12623 0x1b80, 0x00012095, 15039 0x1b80, 0x5f312095,
12624 0x1b80, 0x00012097, 15040 0x1b80, 0x5f312097,
12625 0x1b80, 0xe26d20a5, 15041 0x1b80, 0x000420a5,
12626 0x1b80, 0xe26d20a7, 15042 0x1b80, 0x000420a7,
12627 0x1b80, 0x740020b5, 15043 0x1b80, 0x400a20b5,
12628 0x1b80, 0x740020b7, 15044 0x1b80, 0x400a20b7,
12629 0x1b80, 0xe2b120c5, 15045 0x1b80, 0xe2db20c5,
12630 0x1b80, 0xe2b120c7, 15046 0x1b80, 0xe2db20c7,
12631 0x1b80, 0x000420d5, 15047 0x1b80, 0x000120d5,
12632 0x1b80, 0x000420d7, 15048 0x1b80, 0x000120d7,
12633 0x1b80, 0x400820e5, 15049 0x1b80, 0xe2f420e5,
12634 0x1b80, 0x400820e7, 15050 0x1b80, 0xe2f420e7,
12635 0x1b80, 0x000120f5, 15051 0x1b80, 0x740820f5,
12636 0x1b80, 0x000120f7, 15052 0x1b80, 0x740820f7,
12637 0x1b80, 0x00042105, 15053 0x1b80, 0xe33e2105,
12638 0x1b80, 0x00042107, 15054 0x1b80, 0xe33e2107,
12639 0x1b80, 0x49042115, 15055 0x1b80, 0xe3202115,
12640 0x1b80, 0x49042117, 15056 0x1b80, 0xe3202117,
12641 0x1b80, 0x4bb02125, 15057 0x1b80, 0xe35e2125,
12642 0x1b80, 0x4bb02127, 15058 0x1b80, 0xe35e2127,
12643 0x1b80, 0x00062135, 15059 0x1b80, 0xe36a2135,
12644 0x1b80, 0x00062137, 15060 0x1b80, 0xe36a2137,
12645 0x1b80, 0x75042145, 15061 0x1b80, 0xe2ad2145,
12646 0x1b80, 0x75042147, 15062 0x1b80, 0xe2ad2147,
12647 0x1b80, 0x77082155, 15063 0x1b80, 0x00012155,
12648 0x1b80, 0x77082157, 15064 0x1b80, 0x00012157,
12649 0x1b80, 0x00042165, 15065 0x1b80, 0xe2f42165,
12650 0x1b80, 0x00042167, 15066 0x1b80, 0xe2f42167,
12651 0x1b80, 0x44802175, 15067 0x1b80, 0x74082175,
12652 0x1b80, 0x44802177, 15068 0x1b80, 0x74082177,
12653 0x1b80, 0x45ff2185, 15069 0x1b80, 0xe34e2185,
12654 0x1b80, 0x45ff2187, 15070 0x1b80, 0xe34e2187,
12655 0x1b80, 0x463f2195, 15071 0x1b80, 0xe3202195,
12656 0x1b80, 0x463f2197, 15072 0x1b80, 0xe3202197,
12657 0x1b80, 0x473121a5, 15073 0x1b80, 0xe36421a5,
12658 0x1b80, 0x473121a7, 15074 0x1b80, 0xe36421a7,
12659 0x1b80, 0x400821b5, 15075 0x1b80, 0xe36a21b5,
12660 0x1b80, 0x400821b7, 15076 0x1b80, 0xe36a21b7,
12661 0x1b80, 0xe23e21c5, 15077 0x1b80, 0xe2c321c5,
12662 0x1b80, 0xe23e21c7, 15078 0x1b80, 0xe2c321c7,
12663 0x1b80, 0x000421d5, 15079 0x1b80, 0x000121d5,
12664 0x1b80, 0x000421d7, 15080 0x1b80, 0x000121d7,
12665 0x1b80, 0x400c21e5, 15081 0x1b80, 0xe30a21e5,
12666 0x1b80, 0x400c21e7, 15082 0x1b80, 0xe30a21e7,
12667 0x1b80, 0x000621f5, 15083 0x1b80, 0x740021f5,
12668 0x1b80, 0x000621f7, 15084 0x1b80, 0x740021f7,
12669 0x1b80, 0x75002205, 15085 0x1b80, 0xe33e2205,
12670 0x1b80, 0x75002207, 15086 0x1b80, 0xe33e2207,
12671 0x1b80, 0x00042215, 15087 0x1b80, 0xe32f2215,
12672 0x1b80, 0x00042217, 15088 0x1b80, 0xe32f2217,
12673 0x1b80, 0x445b2225, 15089 0x1b80, 0xe35e2225,
12674 0x1b80, 0x445b2227, 15090 0x1b80, 0xe35e2227,
12675 0x1b80, 0x47002235, 15091 0x1b80, 0xe36a2235,
12676 0x1b80, 0x47002237, 15092 0x1b80, 0xe36a2237,
12677 0x1b80, 0x40082245, 15093 0x1b80, 0xe2ad2245,
12678 0x1b80, 0x40082247, 15094 0x1b80, 0xe2ad2247,
12679 0x1b80, 0x00012255, 15095 0x1b80, 0x00012255,
12680 0x1b80, 0x00012257, 15096 0x1b80, 0x00012257,
12681 0x1b80, 0x00052265, 15097 0x1b80, 0xe30a2265,
12682 0x1b80, 0x00052267, 15098 0x1b80, 0xe30a2267,
12683 0x1b80, 0x61042275, 15099 0x1b80, 0x74002275,
12684 0x1b80, 0x61042277, 15100 0x1b80, 0x74002277,
12685 0x1b80, 0x63b02285, 15101 0x1b80, 0xe34e2285,
12686 0x1b80, 0x63b02287, 15102 0x1b80, 0xe34e2287,
12687 0x1b80, 0x00062295, 15103 0x1b80, 0xe32f2295,
12688 0x1b80, 0x00062297, 15104 0x1b80, 0xe32f2297,
12689 0x1b80, 0x750822a5, 15105 0x1b80, 0xe36422a5,
12690 0x1b80, 0x750822a7, 15106 0x1b80, 0xe36422a7,
12691 0x1b80, 0x770822b5, 15107 0x1b80, 0xe36a22b5,
12692 0x1b80, 0x770822b7, 15108 0x1b80, 0xe36a22b7,
12693 0x1b80, 0x000522c5, 15109 0x1b80, 0xe2c322c5,
12694 0x1b80, 0x000522c7, 15110 0x1b80, 0xe2c322c7,
12695 0x1b80, 0x5c8022d5, 15111 0x1b80, 0x000122d5,
12696 0x1b80, 0x5c8022d7, 15112 0x1b80, 0x000122d7,
12697 0x1b80, 0x5dff22e5, 15113 0x1b80, 0x000422e5,
12698 0x1b80, 0x5dff22e7, 15114 0x1b80, 0x000422e7,
12699 0x1b80, 0x5e3f22f5, 15115 0x1b80, 0x445b22f5,
12700 0x1b80, 0x5e3f22f7, 15116 0x1b80, 0x445b22f7,
12701 0x1b80, 0x5f312305, 15117 0x1b80, 0x47b02305,
12702 0x1b80, 0x5f312307, 15118 0x1b80, 0x47b02307,
12703 0x1b80, 0x00042315, 15119 0x1b80, 0x47302315,
12704 0x1b80, 0x00042317, 15120 0x1b80, 0x47302317,
12705 0x1b80, 0x400a2325, 15121 0x1b80, 0x47002325,
12706 0x1b80, 0x400a2327, 15122 0x1b80, 0x47002327,
12707 0x1b80, 0xe23e2335, 15123 0x1b80, 0x00062335,
12708 0x1b80, 0xe23e2337, 15124 0x1b80, 0x00062337,
12709 0x1b80, 0x00042345, 15125 0x1b80, 0x77082345,
12710 0x1b80, 0x00042347, 15126 0x1b80, 0x77082347,
12711 0x1b80, 0x400c2355, 15127 0x1b80, 0x00042355,
12712 0x1b80, 0x400c2357, 15128 0x1b80, 0x00042357,
12713 0x1b80, 0x00062365, 15129 0x1b80, 0x49402365,
12714 0x1b80, 0x00062367, 15130 0x1b80, 0x49402367,
12715 0x1b80, 0x75002375, 15131 0x1b80, 0x4bb02375,
12716 0x1b80, 0x75002377, 15132 0x1b80, 0x4bb02377,
12717 0x1b80, 0x00052385, 15133 0x1b80, 0x00072385,
12718 0x1b80, 0x00052387, 15134 0x1b80, 0x00072387,
12719 0x1b80, 0x5c5b2395, 15135 0x1b80, 0x54402395,
12720 0x1b80, 0x5c5b2397, 15136 0x1b80, 0x54402397,
12721 0x1b80, 0x5f0023a5, 15137 0x1b80, 0x000423a5,
12722 0x1b80, 0x5f0023a7, 15138 0x1b80, 0x000423a7,
12723 0x1b80, 0x000423b5, 15139 0x1b80, 0x400823b5,
12724 0x1b80, 0x000423b7, 15140 0x1b80, 0x400823b7,
12725 0x1b80, 0x400823c5, 15141 0x1b80, 0x000123c5,
12726 0x1b80, 0x400823c7, 15142 0x1b80, 0x000123c7,
12727 0x1b80, 0x000123d5, 15143 0x1b80, 0x000523d5,
12728 0x1b80, 0x000123d7, 15144 0x1b80, 0x000523d7,
12729 0x1b80, 0x000723e5, 15145 0x1b80, 0x5c5b23e5,
12730 0x1b80, 0x000723e7, 15146 0x1b80, 0x5c5b23e7,
12731 0x1b80, 0x4c1223f5, 15147 0x1b80, 0x5fb023f5,
12732 0x1b80, 0x4c1223f7, 15148 0x1b80, 0x5fb023f7,
12733 0x1b80, 0x4e202405, 15149 0x1b80, 0x5f302405,
12734 0x1b80, 0x4e202407, 15150 0x1b80, 0x5f302407,
12735 0x1b80, 0x00052415, 15151 0x1b80, 0x5f002415,
12736 0x1b80, 0x00052417, 15152 0x1b80, 0x5f002417,
12737 0x1b80, 0x598f2425, 15153 0x1b80, 0x00062425,
12738 0x1b80, 0x598f2427, 15154 0x1b80, 0x00062427,
12739 0x1b80, 0x40022435, 15155 0x1b80, 0x77082435,
12740 0x1b80, 0x40022437, 15156 0x1b80, 0x77082437,
12741 0x1b80, 0x4c012445, 15157 0x1b80, 0x00052445,
12742 0x1b80, 0x4c012447, 15158 0x1b80, 0x00052447,
12743 0x1b80, 0x4c002455, 15159 0x1b80, 0x61402455,
12744 0x1b80, 0x4c002457, 15160 0x1b80, 0x61402457,
12745 0x1b80, 0xab002465, 15161 0x1b80, 0x63b02465,
12746 0x1b80, 0xab002467, 15162 0x1b80, 0x63b02467,
12747 0x1b80, 0x40032475, 15163 0x1b80, 0x00072475,
12748 0x1b80, 0x40032477, 15164 0x1b80, 0x00072477,
12749 0x1b80, 0x49802485, 15165 0x1b80, 0x54402485,
12750 0x1b80, 0x49802487, 15166 0x1b80, 0x54402487,
12751 0x1b80, 0x56c02495, 15167 0x1b80, 0x00042495,
12752 0x1b80, 0x56c02497, 15168 0x1b80, 0x00042497,
12753 0x1b80, 0x540224a5, 15169 0x1b80, 0x400824a5,
12754 0x1b80, 0x540224a7, 15170 0x1b80, 0x400824a7,
12755 0x1b80, 0x4c0124b5, 15171 0x1b80, 0x000124b5,
12756 0x1b80, 0x4c0124b7, 15172 0x1b80, 0x000124b7,
12757 0x1b80, 0x4c0024c5, 15173 0x1b80, 0xe2f424c5,
12758 0x1b80, 0x4c0024c7, 15174 0x1b80, 0xe2f424c7,
12759 0x1b80, 0xab0024d5, 15175 0x1b80, 0x740824d5,
12760 0x1b80, 0xab0024d7, 15176 0x1b80, 0x740824d7,
12761 0x1b80, 0x540024e5, 15177 0x1b80, 0xe33e24e5,
12762 0x1b80, 0x540024e7, 15178 0x1b80, 0xe33e24e7,
12763 0x1b80, 0x000724f5, 15179 0x1b80, 0x000424f5,
12764 0x1b80, 0x000724f7, 15180 0x1b80, 0x000424f7,
12765 0x1b80, 0x4c002505, 15181 0x1b80, 0x40082505,
12766 0x1b80, 0x4c002507, 15182 0x1b80, 0x40082507,
12767 0x1b80, 0x4e002515, 15183 0x1b80, 0x00012515,
12768 0x1b80, 0x4e002517, 15184 0x1b80, 0x00012517,
12769 0x1b80, 0x00052525, 15185 0x1b80, 0xe2f42525,
12770 0x1b80, 0x00052527, 15186 0x1b80, 0xe2f42527,
12771 0x1b80, 0x40042535, 15187 0x1b80, 0x74082535,
12772 0x1b80, 0x40042537, 15188 0x1b80, 0x74082537,
12773 0x1b80, 0x4c012545, 15189 0x1b80, 0xe34e2545,
12774 0x1b80, 0x4c012547, 15190 0x1b80, 0xe34e2547,
12775 0x1b80, 0x4c002555, 15191 0x1b80, 0x00042555,
12776 0x1b80, 0x4c002557, 15192 0x1b80, 0x00042557,
12777 0x1b80, 0x00012565, 15193 0x1b80, 0x40082565,
12778 0x1b80, 0x00012567, 15194 0x1b80, 0x40082567,
12779 0x1b80, 0x00042575, 15195 0x1b80, 0x00012575,
12780 0x1b80, 0x00042577, 15196 0x1b80, 0x00012577,
12781 0x1b80, 0x44802585, 15197 0x1b80, 0xe30a2585,
12782 0x1b80, 0x44802587, 15198 0x1b80, 0xe30a2587,
12783 0x1b80, 0x4b002595, 15199 0x1b80, 0x74002595,
12784 0x1b80, 0x4b002597, 15200 0x1b80, 0x74002597,
12785 0x1b80, 0x000525a5, 15201 0x1b80, 0xe33e25a5,
12786 0x1b80, 0x000525a7, 15202 0x1b80, 0xe33e25a7,
12787 0x1b80, 0x5c8025b5, 15203 0x1b80, 0x000425b5,
12788 0x1b80, 0x5c8025b7, 15204 0x1b80, 0x000425b7,
12789 0x1b80, 0x630025c5, 15205 0x1b80, 0x400825c5,
12790 0x1b80, 0x630025c7, 15206 0x1b80, 0x400825c7,
12791 0x1b80, 0x000725d5, 15207 0x1b80, 0x000125d5,
12792 0x1b80, 0x000725d7, 15208 0x1b80, 0x000125d7,
12793 0x1b80, 0x780c25e5, 15209 0x1b80, 0xe30a25e5,
12794 0x1b80, 0x780c25e7, 15210 0x1b80, 0xe30a25e7,
12795 0x1b80, 0x791925f5, 15211 0x1b80, 0x740025f5,
12796 0x1b80, 0x791925f7, 15212 0x1b80, 0x740025f7,
12797 0x1b80, 0x7a002605, 15213 0x1b80, 0xe34e2605,
12798 0x1b80, 0x7a002607, 15214 0x1b80, 0xe34e2607,
12799 0x1b80, 0x7b822615, 15215 0x1b80, 0x00042615,
12800 0x1b80, 0x7b822617, 15216 0x1b80, 0x00042617,
12801 0x1b80, 0x7b022625, 15217 0x1b80, 0x40082625,
12802 0x1b80, 0x7b022627, 15218 0x1b80, 0x40082627,
12803 0x1b80, 0x78142635, 15219 0x1b80, 0x00012635,
12804 0x1b80, 0x78142637, 15220 0x1b80, 0x00012637,
12805 0x1b80, 0x79ee2645, 15221 0x1b80, 0x40ff2645,
12806 0x1b80, 0x79ee2647, 15222 0x1b80, 0x40ff2647,
12807 0x1b80, 0x7a012655, 15223 0x1b80, 0x411f2655,
12808 0x1b80, 0x7a012657, 15224 0x1b80, 0x411f2657,
12809 0x1b80, 0x7b832665, 15225 0x1b80, 0x42002665,
12810 0x1b80, 0x7b832667, 15226 0x1b80, 0x42002667,
12811 0x1b80, 0x7b032675, 15227 0x1b80, 0x43002675,
12812 0x1b80, 0x7b032677, 15228 0x1b80, 0x43002677,
12813 0x1b80, 0x78282685, 15229 0x1b80, 0x44ff2685,
12814 0x1b80, 0x78282687, 15230 0x1b80, 0x44ff2687,
12815 0x1b80, 0x79b42695, 15231 0x1b80, 0x451f2695,
12816 0x1b80, 0x79b42697, 15232 0x1b80, 0x451f2697,
12817 0x1b80, 0x7a0026a5, 15233 0x1b80, 0x460026a5,
12818 0x1b80, 0x7a0026a7, 15234 0x1b80, 0x460026a7,
12819 0x1b80, 0x7b0026b5, 15235 0x1b80, 0x470026b5,
12820 0x1b80, 0x7b0026b7, 15236 0x1b80, 0x470026b7,
12821 0x1b80, 0x000126c5, 15237 0x1b80, 0x48ff26c5,
12822 0x1b80, 0x000126c7, 15238 0x1b80, 0x48ff26c7,
12823 0x1b80, 0x000426d5, 15239 0x1b80, 0x491f26d5,
12824 0x1b80, 0x000426d7, 15240 0x1b80, 0x491f26d7,
12825 0x1b80, 0x448026e5, 15241 0x1b80, 0x4a0026e5,
12826 0x1b80, 0x448026e7, 15242 0x1b80, 0x4a0026e7,
12827 0x1b80, 0x4b0026f5, 15243 0x1b80, 0x4b0026f5,
12828 0x1b80, 0x4b0026f7, 15244 0x1b80, 0x4b0026f7,
12829 0x1b80, 0x00052705, 15245 0x1b80, 0x00012705,
12830 0x1b80, 0x00052707, 15246 0x1b80, 0x00012707,
12831 0x1b80, 0x5c802715, 15247 0x1b80, 0x4cff2715,
12832 0x1b80, 0x5c802717, 15248 0x1b80, 0x4cff2717,
12833 0x1b80, 0x63002725, 15249 0x1b80, 0x4d1f2725,
12834 0x1b80, 0x63002727, 15250 0x1b80, 0x4d1f2727,
12835 0x1b80, 0x00072735, 15251 0x1b80, 0x4e002735,
12836 0x1b80, 0x00072737, 15252 0x1b80, 0x4e002737,
12837 0x1b80, 0x78102745, 15253 0x1b80, 0x4f002745,
12838 0x1b80, 0x78102747, 15254 0x1b80, 0x4f002747,
12839 0x1b80, 0x79132755, 15255 0x1b80, 0x50ff2755,
12840 0x1b80, 0x79132757, 15256 0x1b80, 0x50ff2757,
12841 0x1b80, 0x7a002765, 15257 0x1b80, 0x511f2765,
12842 0x1b80, 0x7a002767, 15258 0x1b80, 0x511f2767,
12843 0x1b80, 0x7b802775, 15259 0x1b80, 0x52002775,
12844 0x1b80, 0x7b802777, 15260 0x1b80, 0x52002777,
12845 0x1b80, 0x7b002785, 15261 0x1b80, 0x53002785,
12846 0x1b80, 0x7b002787, 15262 0x1b80, 0x53002787,
12847 0x1b80, 0x78db2795, 15263 0x1b80, 0x54ff2795,
12848 0x1b80, 0x78db2797, 15264 0x1b80, 0x54ff2797,
12849 0x1b80, 0x790027a5, 15265 0x1b80, 0x551f27a5,
12850 0x1b80, 0x790027a7, 15266 0x1b80, 0x551f27a7,
12851 0x1b80, 0x7a0027b5, 15267 0x1b80, 0x560027b5,
12852 0x1b80, 0x7a0027b7, 15268 0x1b80, 0x560027b7,
12853 0x1b80, 0x7b8127c5, 15269 0x1b80, 0x570027c5,
12854 0x1b80, 0x7b8127c7, 15270 0x1b80, 0x570027c7,
12855 0x1b80, 0x7b0127d5, 15271 0x1b80, 0x58ff27d5,
12856 0x1b80, 0x7b0127d7, 15272 0x1b80, 0x58ff27d7,
12857 0x1b80, 0x782827e5, 15273 0x1b80, 0x591f27e5,
12858 0x1b80, 0x782827e7, 15274 0x1b80, 0x591f27e7,
12859 0x1b80, 0x79b427f5, 15275 0x1b80, 0x5a0027f5,
12860 0x1b80, 0x79b427f7, 15276 0x1b80, 0x5a0027f7,
12861 0x1b80, 0x7a002805, 15277 0x1b80, 0x5b002805,
12862 0x1b80, 0x7a002807, 15278 0x1b80, 0x5b002807,
12863 0x1b80, 0x7b002815, 15279 0x1b80, 0x00012815,
12864 0x1b80, 0x7b002817, 15280 0x1b80, 0x00012817,
12865 0x1b80, 0x00012825, 15281 0x1b80, 0x5cff2825,
12866 0x1b80, 0x00012827, 15282 0x1b80, 0x5cff2827,
12867 0x1b80, 0x00072835, 15283 0x1b80, 0x5d1f2835,
12868 0x1b80, 0x00072837, 15284 0x1b80, 0x5d1f2837,
12869 0x1b80, 0x783e2845, 15285 0x1b80, 0x5e002845,
12870 0x1b80, 0x783e2847, 15286 0x1b80, 0x5e002847,
12871 0x1b80, 0x79f92855, 15287 0x1b80, 0x5f002855,
12872 0x1b80, 0x79f92857, 15288 0x1b80, 0x5f002857,
12873 0x1b80, 0x7a012865, 15289 0x1b80, 0x60ff2865,
12874 0x1b80, 0x7a012867, 15290 0x1b80, 0x60ff2867,
12875 0x1b80, 0x7b822875, 15291 0x1b80, 0x611f2875,
12876 0x1b80, 0x7b822877, 15292 0x1b80, 0x611f2877,
12877 0x1b80, 0x7b022885, 15293 0x1b80, 0x62002885,
12878 0x1b80, 0x7b022887, 15294 0x1b80, 0x62002887,
12879 0x1b80, 0x78a92895, 15295 0x1b80, 0x63002895,
12880 0x1b80, 0x78a92897, 15296 0x1b80, 0x63002897,
12881 0x1b80, 0x79ed28a5, 15297 0x1b80, 0x000128a5,
12882 0x1b80, 0x79ed28a7, 15298 0x1b80, 0x000128a7,
12883 0x1b80, 0x7b8328b5, 15299 0x1b80, 0x64ff28b5,
12884 0x1b80, 0x7b8328b7, 15300 0x1b80, 0x64ff28b7,
12885 0x1b80, 0x7b0328c5, 15301 0x1b80, 0x651f28c5,
12886 0x1b80, 0x7b0328c7, 15302 0x1b80, 0x651f28c7,
12887 0x1b80, 0x782828d5, 15303 0x1b80, 0x660028d5,
12888 0x1b80, 0x782828d7, 15304 0x1b80, 0x660028d7,
12889 0x1b80, 0x79b428e5, 15305 0x1b80, 0x670028e5,
12890 0x1b80, 0x79b428e7, 15306 0x1b80, 0x670028e7,
12891 0x1b80, 0x7a0028f5, 15307 0x1b80, 0x68ff28f5,
12892 0x1b80, 0x7a0028f7, 15308 0x1b80, 0x68ff28f7,
12893 0x1b80, 0x7b002905, 15309 0x1b80, 0x691f2905,
12894 0x1b80, 0x7b002907, 15310 0x1b80, 0x691f2907,
12895 0x1b80, 0x00012915, 15311 0x1b80, 0x6a002915,
12896 0x1b80, 0x00012917, 15312 0x1b80, 0x6a002917,
12897 0x1b80, 0x00072925, 15313 0x1b80, 0x6b002925,
12898 0x1b80, 0x00072927, 15314 0x1b80, 0x6b002927,
12899 0x1b80, 0x78ae2935, 15315 0x1b80, 0x6cff2935,
12900 0x1b80, 0x78ae2937, 15316 0x1b80, 0x6cff2937,
12901 0x1b80, 0x79fa2945, 15317 0x1b80, 0x6d1f2945,
12902 0x1b80, 0x79fa2947, 15318 0x1b80, 0x6d1f2947,
12903 0x1b80, 0x7a012955, 15319 0x1b80, 0x6e002955,
12904 0x1b80, 0x7a012957, 15320 0x1b80, 0x6e002957,
12905 0x1b80, 0x7b802965, 15321 0x1b80, 0x6f002965,
12906 0x1b80, 0x7b802967, 15322 0x1b80, 0x6f002967,
12907 0x1b80, 0x7b002975, 15323 0x1b80, 0x70ff2975,
12908 0x1b80, 0x7b002977, 15324 0x1b80, 0x70ff2977,
12909 0x1b80, 0x787a2985, 15325 0x1b80, 0x711f2985,
12910 0x1b80, 0x787a2987, 15326 0x1b80, 0x711f2987,
12911 0x1b80, 0x79f12995, 15327 0x1b80, 0x72002995,
12912 0x1b80, 0x79f12997, 15328 0x1b80, 0x72002997,
12913 0x1b80, 0x7b8129a5, 15329 0x1b80, 0x730029a5,
12914 0x1b80, 0x7b8129a7, 15330 0x1b80, 0x730029a7,
12915 0x1b80, 0x7b0129b5, 15331 0x1b80, 0x000129b5,
12916 0x1b80, 0x7b0129b7, 15332 0x1b80, 0x000129b7,
12917 0x1b80, 0x782829c5, 15333 0x1b80, 0x70ff29c5,
12918 0x1b80, 0x782829c7, 15334 0x1b80, 0x70ff29c7,
12919 0x1b80, 0x79b429d5, 15335 0x1b80, 0x711f29d5,
12920 0x1b80, 0x79b429d7, 15336 0x1b80, 0x711f29d7,
12921 0x1b80, 0x7a0029e5, 15337 0x1b80, 0x720029e5,
12922 0x1b80, 0x7a0029e7, 15338 0x1b80, 0x720029e7,
12923 0x1b80, 0x7b0029f5, 15339 0x1b80, 0x730029f5,
12924 0x1b80, 0x7b0029f7, 15340 0x1b80, 0x730029f7,
12925 0x1b80, 0x00012a05, 15341 0x1b80, 0x74ff2a05,
12926 0x1b80, 0x00012a07, 15342 0x1b80, 0x74ff2a07,
12927 0x1b80, 0x00072a15, 15343 0x1b80, 0x751f2a15,
12928 0x1b80, 0x00072a17, 15344 0x1b80, 0x751f2a17,
12929 0x1b80, 0x75002a25, 15345 0x1b80, 0x76002a25,
12930 0x1b80, 0x75002a27, 15346 0x1b80, 0x76002a27,
12931 0x1b80, 0x76022a35, 15347 0x1b80, 0x77002a35,
12932 0x1b80, 0x76022a37, 15348 0x1b80, 0x77002a37,
12933 0x1b80, 0x77152a45, 15349 0x1b80, 0x78ff2a45,
12934 0x1b80, 0x77152a47, 15350 0x1b80, 0x78ff2a47,
12935 0x1b80, 0x00062a55, 15351 0x1b80, 0x791f2a55,
12936 0x1b80, 0x00062a57, 15352 0x1b80, 0x791f2a57,
12937 0x1b80, 0x74002a65, 15353 0x1b80, 0x7a002a65,
12938 0x1b80, 0x74002a67, 15354 0x1b80, 0x7a002a67,
12939 0x1b80, 0x76002a75, 15355 0x1b80, 0x7b002a75,
12940 0x1b80, 0x76002a77, 15356 0x1b80, 0x7b002a77,
12941 0x1b80, 0x77002a85, 15357 0x1b80, 0x7cff2a85,
12942 0x1b80, 0x77002a87, 15358 0x1b80, 0x7cff2a87,
12943 0x1b80, 0x75102a95, 15359 0x1b80, 0x7d1f2a95,
12944 0x1b80, 0x75102a97, 15360 0x1b80, 0x7d1f2a97,
12945 0x1b80, 0x75002aa5, 15361 0x1b80, 0x7e002aa5,
12946 0x1b80, 0x75002aa7, 15362 0x1b80, 0x7e002aa7,
12947 0x1b80, 0xb3002ab5, 15363 0x1b80, 0x7f002ab5,
12948 0x1b80, 0xb3002ab7, 15364 0x1b80, 0x7f002ab7,
12949 0x1b80, 0x93002ac5, 15365 0x1b80, 0x00012ac5,
12950 0x1b80, 0x93002ac7, 15366 0x1b80, 0x00012ac7,
12951 0x1b80, 0x00072ad5, 15367 0x1b80, 0x00042ad5,
12952 0x1b80, 0x00072ad7, 15368 0x1b80, 0x00042ad7,
12953 0x1b80, 0x76002ae5, 15369 0x1b80, 0x49042ae5,
12954 0x1b80, 0x76002ae7, 15370 0x1b80, 0x49042ae7,
12955 0x1b80, 0x77002af5, 15371 0x1b80, 0x4bb02af5,
12956 0x1b80, 0x77002af7, 15372 0x1b80, 0x4bb02af7,
12957 0x1b80, 0x00012b05, 15373 0x1b80, 0x00062b05,
12958 0x1b80, 0x00012b07, 15374 0x1b80, 0x00062b07,
12959 0x1b80, 0x00072b15, 15375 0x1b80, 0x75042b15,
12960 0x1b80, 0x00072b17, 15376 0x1b80, 0x75042b17,
12961 0x1b80, 0x75002b25, 15377 0x1b80, 0x77082b25,
12962 0x1b80, 0x75002b27, 15378 0x1b80, 0x77082b27,
12963 0x1b80, 0x76022b35, 15379 0x1b80, 0x00042b35,
12964 0x1b80, 0x76022b37, 15380 0x1b80, 0x00042b37,
12965 0x1b80, 0x77252b45, 15381 0x1b80, 0x44802b45,
12966 0x1b80, 0x77252b47, 15382 0x1b80, 0x44802b47,
12967 0x1b80, 0x00062b55, 15383 0x1b80, 0x45ff2b55,
12968 0x1b80, 0x00062b57, 15384 0x1b80, 0x45ff2b57,
12969 0x1b80, 0x74002b65, 15385 0x1b80, 0x463f2b65,
12970 0x1b80, 0x74002b67, 15386 0x1b80, 0x463f2b67,
12971 0x1b80, 0x76002b75, 15387 0x1b80, 0x47312b75,
12972 0x1b80, 0x76002b77, 15388 0x1b80, 0x47312b77,
12973 0x1b80, 0x77012b85, 15389 0x1b80, 0x40082b85,
12974 0x1b80, 0x77012b87, 15390 0x1b80, 0x40082b87,
12975 0x1b80, 0x75102b95, 15391 0x1b80, 0xe2db2b95,
12976 0x1b80, 0x75102b97, 15392 0x1b80, 0xe2db2b97,
12977 0x1b80, 0x75002ba5, 15393 0x1b80, 0x00042ba5,
12978 0x1b80, 0x75002ba7, 15394 0x1b80, 0x00042ba7,
12979 0x1b80, 0xb3002bb5, 15395 0x1b80, 0x400c2bb5,
12980 0x1b80, 0xb3002bb7, 15396 0x1b80, 0x400c2bb7,
12981 0x1b80, 0x93002bc5, 15397 0x1b80, 0x00062bc5,
12982 0x1b80, 0x93002bc7, 15398 0x1b80, 0x00062bc7,
12983 0x1b80, 0x00072bd5, 15399 0x1b80, 0x75002bd5,
12984 0x1b80, 0x00072bd7, 15400 0x1b80, 0x75002bd7,
12985 0x1b80, 0x76002be5, 15401 0x1b80, 0x00042be5,
12986 0x1b80, 0x76002be7, 15402 0x1b80, 0x00042be7,
12987 0x1b80, 0x77002bf5, 15403 0x1b80, 0x445b2bf5,
12988 0x1b80, 0x77002bf7, 15404 0x1b80, 0x445b2bf7,
12989 0x1b80, 0x00012c05, 15405 0x1b80, 0x47002c05,
12990 0x1b80, 0x00012c07, 15406 0x1b80, 0x47002c07,
12991 0x1b80, 0x00042c15, 15407 0x1b80, 0x40082c15,
12992 0x1b80, 0x00042c17, 15408 0x1b80, 0x40082c17,
12993 0x1b80, 0x44802c25, 15409 0x1b80, 0x00012c25,
12994 0x1b80, 0x44802c27, 15410 0x1b80, 0x00012c27,
12995 0x1b80, 0x47302c35, 15411 0x1b80, 0x00052c35,
12996 0x1b80, 0x47302c37, 15412 0x1b80, 0x00052c37,
12997 0x1b80, 0x00062c45, 15413 0x1b80, 0x61042c45,
12998 0x1b80, 0x00062c47, 15414 0x1b80, 0x61042c47,
12999 0x1b80, 0x776c2c55, 15415 0x1b80, 0x63b02c55,
13000 0x1b80, 0x776c2c57, 15416 0x1b80, 0x63b02c57,
13001 0x1b80, 0x00012c65, 15417 0x1b80, 0x00062c65,
13002 0x1b80, 0x00012c67, 15418 0x1b80, 0x00062c67,
13003 0x1b80, 0x00052c75, 15419 0x1b80, 0x75082c75,
13004 0x1b80, 0x00052c77, 15420 0x1b80, 0x75082c77,
13005 0x1b80, 0x5c802c85, 15421 0x1b80, 0x77082c85,
13006 0x1b80, 0x5c802c87, 15422 0x1b80, 0x77082c87,
13007 0x1b80, 0x5f302c95, 15423 0x1b80, 0x00052c95,
13008 0x1b80, 0x5f302c97, 15424 0x1b80, 0x00052c97,
13009 0x1b80, 0x00062ca5, 15425 0x1b80, 0x5c802ca5,
13010 0x1b80, 0x00062ca7, 15426 0x1b80, 0x5c802ca7,
13011 0x1b80, 0x776d2cb5, 15427 0x1b80, 0x5dff2cb5,
13012 0x1b80, 0x776d2cb7, 15428 0x1b80, 0x5dff2cb7,
13013 0x1b80, 0x00012cc5, 15429 0x1b80, 0x5e3f2cc5,
13014 0x1b80, 0x00012cc7, 15430 0x1b80, 0x5e3f2cc7,
13015 0x1b80, 0xb9002cd5, 15431 0x1b80, 0x5f312cd5,
13016 0x1b80, 0xb9002cd7, 15432 0x1b80, 0x5f312cd7,
13017 0x1b80, 0x99002ce5, 15433 0x1b80, 0x00042ce5,
13018 0x1b80, 0x99002ce7, 15434 0x1b80, 0x00042ce7,
13019 0x1b80, 0x00062cf5, 15435 0x1b80, 0x400a2cf5,
13020 0x1b80, 0x00062cf7, 15436 0x1b80, 0x400a2cf7,
13021 0x1b80, 0x77002d05, 15437 0x1b80, 0xe2db2d05,
13022 0x1b80, 0x77002d07, 15438 0x1b80, 0xe2db2d07,
13023 0x1b80, 0x98052d15, 15439 0x1b80, 0x00042d15,
13024 0x1b80, 0x98052d17, 15440 0x1b80, 0x00042d17,
13025 0x1b80, 0x00042d25, 15441 0x1b80, 0x400c2d25,
13026 0x1b80, 0x00042d27, 15442 0x1b80, 0x400c2d27,
13027 0x1b80, 0x40082d35, 15443 0x1b80, 0x00062d35,
13028 0x1b80, 0x40082d37, 15444 0x1b80, 0x00062d37,
13029 0x1b80, 0x4a022d45, 15445 0x1b80, 0x75002d45,
13030 0x1b80, 0x4a022d47, 15446 0x1b80, 0x75002d47,
13031 0x1b80, 0x30192d55, 15447 0x1b80, 0x00052d55,
13032 0x1b80, 0x30192d57, 15448 0x1b80, 0x00052d57,
13033 0x1b80, 0x00012d65, 15449 0x1b80, 0x5c5b2d65,
13034 0x1b80, 0x00012d67, 15450 0x1b80, 0x5c5b2d67,
13035 0x1b80, 0x7b482d75, 15451 0x1b80, 0x5f002d75,
13036 0x1b80, 0x7b482d77, 15452 0x1b80, 0x5f002d77,
13037 0x1b80, 0x7a902d85, 15453 0x1b80, 0x00042d85,
13038 0x1b80, 0x7a902d87, 15454 0x1b80, 0x00042d87,
13039 0x1b80, 0x79002d95, 15455 0x1b80, 0x40082d95,
13040 0x1b80, 0x79002d97, 15456 0x1b80, 0x40082d97,
13041 0x1b80, 0x55032da5, 15457 0x1b80, 0x00012da5,
13042 0x1b80, 0x55032da7, 15458 0x1b80, 0x00012da7,
13043 0x1b80, 0x32e32db5, 15459 0x1b80, 0x00072db5,
13044 0x1b80, 0x32e32db7, 15460 0x1b80, 0x00072db7,
13045 0x1b80, 0x7b382dc5, 15461 0x1b80, 0x4c122dc5,
13046 0x1b80, 0x7b382dc7, 15462 0x1b80, 0x4c122dc7,
13047 0x1b80, 0x7a802dd5, 15463 0x1b80, 0x4e202dd5,
13048 0x1b80, 0x7a802dd7, 15464 0x1b80, 0x4e202dd7,
13049 0x1b80, 0x550b2de5, 15465 0x1b80, 0x00052de5,
13050 0x1b80, 0x550b2de7, 15466 0x1b80, 0x00052de7,
13051 0x1b80, 0x32e32df5, 15467 0x1b80, 0x598f2df5,
13052 0x1b80, 0x32e32df7, 15468 0x1b80, 0x598f2df7,
13053 0x1b80, 0x7b402e05, 15469 0x1b80, 0x40022e05,
13054 0x1b80, 0x7b402e07, 15470 0x1b80, 0x40022e07,
13055 0x1b80, 0x7a002e15, 15471 0x1b80, 0x4c012e15,
13056 0x1b80, 0x7a002e17, 15472 0x1b80, 0x4c012e17,
13057 0x1b80, 0x55132e25, 15473 0x1b80, 0x4c002e25,
13058 0x1b80, 0x55132e27, 15474 0x1b80, 0x4c002e27,
13059 0x1b80, 0x74012e35, 15475 0x1b80, 0xab002e35,
13060 0x1b80, 0x74012e37, 15476 0x1b80, 0xab002e37,
13061 0x1b80, 0x74002e45, 15477 0x1b80, 0x40032e45,
13062 0x1b80, 0x74002e47, 15478 0x1b80, 0x40032e47,
13063 0x1b80, 0x8e002e55, 15479 0x1b80, 0x49802e55,
13064 0x1b80, 0x8e002e57, 15480 0x1b80, 0x49802e57,
13065 0x1b80, 0x00012e65, 15481 0x1b80, 0x56c02e65,
13066 0x1b80, 0x00012e67, 15482 0x1b80, 0x56c02e67,
13067 0x1b80, 0x57022e75, 15483 0x1b80, 0x54022e75,
13068 0x1b80, 0x57022e77, 15484 0x1b80, 0x54022e77,
13069 0x1b80, 0x57002e85, 15485 0x1b80, 0x4c012e85,
13070 0x1b80, 0x57002e87, 15486 0x1b80, 0x4c012e87,
13071 0x1b80, 0x97002e95, 15487 0x1b80, 0x4c002e95,
13072 0x1b80, 0x97002e97, 15488 0x1b80, 0x4c002e97,
13073 0x1b80, 0x00012ea5, 15489 0x1b80, 0xab002ea5,
13074 0x1b80, 0x00012ea7, 15490 0x1b80, 0xab002ea7,
13075 0x1b80, 0x4f782eb5, 15491 0x1b80, 0x54002eb5,
13076 0x1b80, 0x4f782eb7, 15492 0x1b80, 0x54002eb7,
13077 0x1b80, 0x53882ec5, 15493 0x1b80, 0x00072ec5,
13078 0x1b80, 0x53882ec7, 15494 0x1b80, 0x00072ec7,
13079 0x1b80, 0xe2f72ed5, 15495 0x1b80, 0x4c002ed5,
13080 0x1b80, 0xe2f72ed7, 15496 0x1b80, 0x4c002ed7,
13081 0x1b80, 0x54802ee5, 15497 0x1b80, 0x4e002ee5,
13082 0x1b80, 0x54802ee7, 15498 0x1b80, 0x4e002ee7,
13083 0x1b80, 0x54002ef5, 15499 0x1b80, 0x00052ef5,
13084 0x1b80, 0x54002ef7, 15500 0x1b80, 0x00052ef7,
13085 0x1b80, 0x54812f05, 15501 0x1b80, 0x40042f05,
13086 0x1b80, 0x54812f07, 15502 0x1b80, 0x40042f07,
13087 0x1b80, 0x54002f15, 15503 0x1b80, 0x4c012f15,
13088 0x1b80, 0x54002f17, 15504 0x1b80, 0x4c012f17,
13089 0x1b80, 0x54822f25, 15505 0x1b80, 0x4c002f25,
13090 0x1b80, 0x54822f27, 15506 0x1b80, 0x4c002f27,
13091 0x1b80, 0x54002f35, 15507 0x1b80, 0x00012f35,
13092 0x1b80, 0x54002f37, 15508 0x1b80, 0x00012f37,
13093 0x1b80, 0xe3022f45, 15509 0x1b80, 0x00042f45,
13094 0x1b80, 0xe3022f47, 15510 0x1b80, 0x00042f47,
13095 0x1b80, 0xbf1d2f55, 15511 0x1b80, 0x44802f55,
13096 0x1b80, 0xbf1d2f57, 15512 0x1b80, 0x44802f57,
13097 0x1b80, 0x30192f65, 15513 0x1b80, 0x4b002f65,
13098 0x1b80, 0x30192f67, 15514 0x1b80, 0x4b002f67,
13099 0x1b80, 0xe2d72f75, 15515 0x1b80, 0x00052f75,
13100 0x1b80, 0xe2d72f77, 15516 0x1b80, 0x00052f77,
13101 0x1b80, 0xe2dc2f85, 15517 0x1b80, 0x5c802f85,
13102 0x1b80, 0xe2dc2f87, 15518 0x1b80, 0x5c802f87,
13103 0x1b80, 0xe2e02f95, 15519 0x1b80, 0x63002f95,
13104 0x1b80, 0xe2e02f97, 15520 0x1b80, 0x63002f97,
13105 0x1b80, 0xe2e72fa5, 15521 0x1b80, 0x00072fa5,
13106 0x1b80, 0xe2e72fa7, 15522 0x1b80, 0x00072fa7,
13107 0x1b80, 0xe3412fb5, 15523 0x1b80, 0x780c2fb5,
13108 0x1b80, 0xe3412fb7, 15524 0x1b80, 0x780c2fb7,
13109 0x1b80, 0x55132fc5, 15525 0x1b80, 0x79192fc5,
13110 0x1b80, 0x55132fc7, 15526 0x1b80, 0x79192fc7,
13111 0x1b80, 0xe2e32fd5, 15527 0x1b80, 0x7a002fd5,
13112 0x1b80, 0xe2e32fd7, 15528 0x1b80, 0x7a002fd7,
13113 0x1b80, 0x55152fe5, 15529 0x1b80, 0x7b822fe5,
13114 0x1b80, 0x55152fe7, 15530 0x1b80, 0x7b822fe7,
13115 0x1b80, 0xe2e72ff5, 15531 0x1b80, 0x7b022ff5,
13116 0x1b80, 0xe2e72ff7, 15532 0x1b80, 0x7b022ff7,
13117 0x1b80, 0xe3413005, 15533 0x1b80, 0x78143005,
13118 0x1b80, 0xe3413007, 15534 0x1b80, 0x78143007,
13119 0x1b80, 0x00013015, 15535 0x1b80, 0x79ee3015,
13120 0x1b80, 0x00013017, 15536 0x1b80, 0x79ee3017,
13121 0x1b80, 0x54bf3025, 15537 0x1b80, 0x7a013025,
13122 0x1b80, 0x54bf3027, 15538 0x1b80, 0x7a013027,
13123 0x1b80, 0x54c03035, 15539 0x1b80, 0x7b833035,
13124 0x1b80, 0x54c03037, 15540 0x1b80, 0x7b833037,
13125 0x1b80, 0x54a33045, 15541 0x1b80, 0x7b033045,
13126 0x1b80, 0x54a33047, 15542 0x1b80, 0x7b033047,
13127 0x1b80, 0x54c13055, 15543 0x1b80, 0x78283055,
13128 0x1b80, 0x54c13057, 15544 0x1b80, 0x78283057,
13129 0x1b80, 0x54a43065, 15545 0x1b80, 0x79b43065,
13130 0x1b80, 0x54a43067, 15546 0x1b80, 0x79b43067,
13131 0x1b80, 0x4c183075, 15547 0x1b80, 0x7a003075,
13132 0x1b80, 0x4c183077, 15548 0x1b80, 0x7a003077,
13133 0x1b80, 0xbf073085, 15549 0x1b80, 0x7b003085,
13134 0x1b80, 0xbf073087, 15550 0x1b80, 0x7b003087,
13135 0x1b80, 0x54c23095, 15551 0x1b80, 0x00013095,
13136 0x1b80, 0x54c23097, 15552 0x1b80, 0x00013097,
13137 0x1b80, 0x54a430a5, 15553 0x1b80, 0x000430a5,
13138 0x1b80, 0x54a430a7, 15554 0x1b80, 0x000430a7,
13139 0x1b80, 0xbf0430b5, 15555 0x1b80, 0x448030b5,
13140 0x1b80, 0xbf0430b7, 15556 0x1b80, 0x448030b7,
13141 0x1b80, 0x54c130c5, 15557 0x1b80, 0x4b0030c5,
13142 0x1b80, 0x54c130c7, 15558 0x1b80, 0x4b0030c7,
13143 0x1b80, 0x54a330d5, 15559 0x1b80, 0x000530d5,
13144 0x1b80, 0x54a330d7, 15560 0x1b80, 0x000530d7,
13145 0x1b80, 0xbf0130e5, 15561 0x1b80, 0x5c8030e5,
13146 0x1b80, 0xbf0130e7, 15562 0x1b80, 0x5c8030e7,
13147 0x1b80, 0xe34f30f5, 15563 0x1b80, 0x630030f5,
13148 0x1b80, 0xe34f30f7, 15564 0x1b80, 0x630030f7,
13149 0x1b80, 0x54df3105, 15565 0x1b80, 0x00073105,
13150 0x1b80, 0x54df3107, 15566 0x1b80, 0x00073107,
13151 0x1b80, 0x00013115, 15567 0x1b80, 0x78103115,
13152 0x1b80, 0x00013117, 15568 0x1b80, 0x78103117,
13153 0x1b80, 0x54bf3125, 15569 0x1b80, 0x79133125,
13154 0x1b80, 0x54bf3127, 15570 0x1b80, 0x79133127,
13155 0x1b80, 0x54e53135, 15571 0x1b80, 0x7a003135,
13156 0x1b80, 0x54e53137, 15572 0x1b80, 0x7a003137,
13157 0x1b80, 0x050a3145, 15573 0x1b80, 0x7b803145,
13158 0x1b80, 0x050a3147, 15574 0x1b80, 0x7b803147,
13159 0x1b80, 0x54df3155, 15575 0x1b80, 0x7b003155,
13160 0x1b80, 0x54df3157, 15576 0x1b80, 0x7b003157,
13161 0x1b80, 0x00013165, 15577 0x1b80, 0x78db3165,
13162 0x1b80, 0x00013167, 15578 0x1b80, 0x78db3167,
13163 0x1b80, 0x7f403175, 15579 0x1b80, 0x79003175,
13164 0x1b80, 0x7f403177, 15580 0x1b80, 0x79003177,
13165 0x1b80, 0x7e003185, 15581 0x1b80, 0x7a003185,
13166 0x1b80, 0x7e003187, 15582 0x1b80, 0x7a003187,
13167 0x1b80, 0x7d003195, 15583 0x1b80, 0x7b813195,
13168 0x1b80, 0x7d003197, 15584 0x1b80, 0x7b813197,
13169 0x1b80, 0x550131a5, 15585 0x1b80, 0x7b0131a5,
13170 0x1b80, 0x550131a7, 15586 0x1b80, 0x7b0131a7,
13171 0x1b80, 0x5c3131b5, 15587 0x1b80, 0x782831b5,
13172 0x1b80, 0x5c3131b7, 15588 0x1b80, 0x782831b7,
13173 0x1b80, 0xe2e331c5, 15589 0x1b80, 0x79b431c5,
13174 0x1b80, 0xe2e331c7, 15590 0x1b80, 0x79b431c7,
13175 0x1b80, 0xe2e731d5, 15591 0x1b80, 0x7a0031d5,
13176 0x1b80, 0xe2e731d7, 15592 0x1b80, 0x7a0031d7,
13177 0x1b80, 0x548031e5, 15593 0x1b80, 0x7b0031e5,
13178 0x1b80, 0x548031e7, 15594 0x1b80, 0x7b0031e7,
13179 0x1b80, 0x540031f5, 15595 0x1b80, 0x000131f5,
13180 0x1b80, 0x540031f7, 15596 0x1b80, 0x000131f7,
13181 0x1b80, 0x54813205, 15597 0x1b80, 0x00073205,
13182 0x1b80, 0x54813207, 15598 0x1b80, 0x00073207,
13183 0x1b80, 0x54003215, 15599 0x1b80, 0x783e3215,
13184 0x1b80, 0x54003217, 15600 0x1b80, 0x783e3217,
13185 0x1b80, 0x54823225, 15601 0x1b80, 0x79f93225,
13186 0x1b80, 0x54823227, 15602 0x1b80, 0x79f93227,
13187 0x1b80, 0x54003235, 15603 0x1b80, 0x7a013235,
13188 0x1b80, 0x54003237, 15604 0x1b80, 0x7a013237,
13189 0x1b80, 0xe3023245, 15605 0x1b80, 0x7b823245,
13190 0x1b80, 0xe3023247, 15606 0x1b80, 0x7b823247,
13191 0x1b80, 0xbfed3255, 15607 0x1b80, 0x7b023255,
13192 0x1b80, 0xbfed3257, 15608 0x1b80, 0x7b023257,
13193 0x1b80, 0x30193265, 15609 0x1b80, 0x78a93265,
13194 0x1b80, 0x30193267, 15610 0x1b80, 0x78a93267,
13195 0x1b80, 0x74023275, 15611 0x1b80, 0x79ed3275,
13196 0x1b80, 0x74023277, 15612 0x1b80, 0x79ed3277,
13197 0x1b80, 0x003f3285, 15613 0x1b80, 0x7b833285,
13198 0x1b80, 0x003f3287, 15614 0x1b80, 0x7b833287,
13199 0x1b80, 0x74003295, 15615 0x1b80, 0x7b033295,
13200 0x1b80, 0x74003297, 15616 0x1b80, 0x7b033297,
13201 0x1b80, 0x000232a5, 15617 0x1b80, 0x782832a5,
13202 0x1b80, 0x000232a7, 15618 0x1b80, 0x782832a7,
13203 0x1b80, 0x000132b5, 15619 0x1b80, 0x79b432b5,
13204 0x1b80, 0x000132b7, 15620 0x1b80, 0x79b432b7,
13205 0x1b80, 0x000632c5, 15621 0x1b80, 0x7a0032c5,
13206 0x1b80, 0x000632c7, 15622 0x1b80, 0x7a0032c7,
13207 0x1b80, 0x5a8032d5, 15623 0x1b80, 0x7b0032d5,
13208 0x1b80, 0x5a8032d7, 15624 0x1b80, 0x7b0032d7,
13209 0x1b80, 0x5a0032e5, 15625 0x1b80, 0x000132e5,
13210 0x1b80, 0x5a0032e7, 15626 0x1b80, 0x000132e7,
13211 0x1b80, 0x920032f5, 15627 0x1b80, 0x000732f5,
13212 0x1b80, 0x920032f7, 15628 0x1b80, 0x000732f7,
13213 0x1b80, 0x00013305, 15629 0x1b80, 0x78ae3305,
13214 0x1b80, 0x00013307, 15630 0x1b80, 0x78ae3307,
13215 0x1b80, 0x5b8f3315, 15631 0x1b80, 0x79fa3315,
13216 0x1b80, 0x5b8f3317, 15632 0x1b80, 0x79fa3317,
13217 0x1b80, 0x5b0f3325, 15633 0x1b80, 0x7a013325,
13218 0x1b80, 0x5b0f3327, 15634 0x1b80, 0x7a013327,
13219 0x1b80, 0x91003335, 15635 0x1b80, 0x7b803335,
13220 0x1b80, 0x91003337, 15636 0x1b80, 0x7b803337,
13221 0x1b80, 0x00013345, 15637 0x1b80, 0x7b003345,
13222 0x1b80, 0x00013347, 15638 0x1b80, 0x7b003347,
13223 0x1b80, 0x00063355, 15639 0x1b80, 0x787a3355,
13224 0x1b80, 0x00063357, 15640 0x1b80, 0x787a3357,
13225 0x1b80, 0x5d803365, 15641 0x1b80, 0x79f13365,
13226 0x1b80, 0x5d803367, 15642 0x1b80, 0x79f13367,
13227 0x1b80, 0x5e563375, 15643 0x1b80, 0x7b813375,
13228 0x1b80, 0x5e563377, 15644 0x1b80, 0x7b813377,
13229 0x1b80, 0x00043385, 15645 0x1b80, 0x7b013385,
13230 0x1b80, 0x00043387, 15646 0x1b80, 0x7b013387,
13231 0x1b80, 0x4d083395, 15647 0x1b80, 0x78283395,
13232 0x1b80, 0x4d083397, 15648 0x1b80, 0x78283397,
13233 0x1b80, 0x571033a5, 15649 0x1b80, 0x79b433a5,
13234 0x1b80, 0x571033a7, 15650 0x1b80, 0x79b433a7,
13235 0x1b80, 0x570033b5, 15651 0x1b80, 0x7a0033b5,
13236 0x1b80, 0x570033b7, 15652 0x1b80, 0x7a0033b7,
13237 0x1b80, 0x4d0033c5, 15653 0x1b80, 0x7b0033c5,
13238 0x1b80, 0x4d0033c7, 15654 0x1b80, 0x7b0033c7,
13239 0x1b80, 0x000633d5, 15655 0x1b80, 0x000133d5,
13240 0x1b80, 0x000633d7, 15656 0x1b80, 0x000133d7,
13241 0x1b80, 0x5d0033e5, 15657 0x1b80, 0x000733e5,
13242 0x1b80, 0x5d0033e7, 15658 0x1b80, 0x000733e7,
13243 0x1b80, 0x000433f5, 15659 0x1b80, 0x750033f5,
13244 0x1b80, 0x000433f7, 15660 0x1b80, 0x750033f7,
13245 0x1b80, 0x00013405, 15661 0x1b80, 0x76023405,
13246 0x1b80, 0x00013407, 15662 0x1b80, 0x76023407,
13247 0x1b80, 0x549f3415, 15663 0x1b80, 0x77153415,
13248 0x1b80, 0x549f3417, 15664 0x1b80, 0x77153417,
13249 0x1b80, 0x54ff3425, 15665 0x1b80, 0x00063425,
13250 0x1b80, 0x54ff3427, 15666 0x1b80, 0x00063427,
13251 0x1b80, 0x54003435, 15667 0x1b80, 0x74003435,
13252 0x1b80, 0x54003437, 15668 0x1b80, 0x74003437,
13253 0x1b80, 0x00013445, 15669 0x1b80, 0x76003445,
13254 0x1b80, 0x00013447, 15670 0x1b80, 0x76003447,
13255 0x1b80, 0x5c313455, 15671 0x1b80, 0x77003455,
13256 0x1b80, 0x5c313457, 15672 0x1b80, 0x77003457,
13257 0x1b80, 0x07143465, 15673 0x1b80, 0x75103465,
13258 0x1b80, 0x07143467, 15674 0x1b80, 0x75103467,
13259 0x1b80, 0x54003475, 15675 0x1b80, 0x75003475,
13260 0x1b80, 0x54003477, 15676 0x1b80, 0x75003477,
13261 0x1b80, 0x5c323485, 15677 0x1b80, 0xb3003485,
13262 0x1b80, 0x5c323487, 15678 0x1b80, 0xb3003487,
13263 0x1b80, 0x00013495, 15679 0x1b80, 0x93003495,
13264 0x1b80, 0x00013497, 15680 0x1b80, 0x93003497,
13265 0x1b80, 0x5c3234a5, 15681 0x1b80, 0x000734a5,
13266 0x1b80, 0x5c3234a7, 15682 0x1b80, 0x000734a7,
13267 0x1b80, 0x071434b5, 15683 0x1b80, 0x760034b5,
13268 0x1b80, 0x071434b7, 15684 0x1b80, 0x760034b7,
13269 0x1b80, 0x540034c5, 15685 0x1b80, 0x770034c5,
13270 0x1b80, 0x540034c7, 15686 0x1b80, 0x770034c7,
13271 0x1b80, 0x5c3134d5, 15687 0x1b80, 0x000134d5,
13272 0x1b80, 0x5c3134d7, 15688 0x1b80, 0x000134d7,
13273 0x1b80, 0x000134e5, 15689 0x1b80, 0x000734e5,
13274 0x1b80, 0x000134e7, 15690 0x1b80, 0x000734e7,
13275 0x1b80, 0x4c9834f5, 15691 0x1b80, 0x750034f5,
13276 0x1b80, 0x4c9834f7, 15692 0x1b80, 0x750034f7,
13277 0x1b80, 0x4c183505, 15693 0x1b80, 0x76023505,
13278 0x1b80, 0x4c183507, 15694 0x1b80, 0x76023507,
13279 0x1b80, 0x00013515, 15695 0x1b80, 0x77253515,
13280 0x1b80, 0x00013517, 15696 0x1b80, 0x77253517,
13281 0x1b80, 0x5c323525, 15697 0x1b80, 0x00063525,
13282 0x1b80, 0x5c323527, 15698 0x1b80, 0x00063527,
13283 0x1b80, 0x62043535, 15699 0x1b80, 0x74003535,
13284 0x1b80, 0x62043537, 15700 0x1b80, 0x74003537,
13285 0x1b80, 0x63033545, 15701 0x1b80, 0x76003545,
13286 0x1b80, 0x63033547, 15702 0x1b80, 0x76003547,
13287 0x1b80, 0x66073555, 15703 0x1b80, 0x77013555,
13288 0x1b80, 0x66073557, 15704 0x1b80, 0x77013557,
13289 0x1b80, 0x7b403565, 15705 0x1b80, 0x75103565,
13290 0x1b80, 0x7b403567, 15706 0x1b80, 0x75103567,
13291 0x1b80, 0x7a003575, 15707 0x1b80, 0x75003575,
13292 0x1b80, 0x7a003577, 15708 0x1b80, 0x75003577,
13293 0x1b80, 0x79003585, 15709 0x1b80, 0xb3003585,
13294 0x1b80, 0x79003587, 15710 0x1b80, 0xb3003587,
13295 0x1b80, 0x7f403595, 15711 0x1b80, 0x93003595,
13296 0x1b80, 0x7f403597, 15712 0x1b80, 0x93003597,
13297 0x1b80, 0x7e0035a5, 15713 0x1b80, 0x000735a5,
13298 0x1b80, 0x7e0035a7, 15714 0x1b80, 0x000735a7,
13299 0x1b80, 0x7d0035b5, 15715 0x1b80, 0x760035b5,
13300 0x1b80, 0x7d0035b7, 15716 0x1b80, 0x760035b7,
13301 0x1b80, 0x090135c5, 15717 0x1b80, 0x770035c5,
13302 0x1b80, 0x090135c7, 15718 0x1b80, 0x770035c7,
13303 0x1b80, 0x0c0135d5, 15719 0x1b80, 0x000135d5,
13304 0x1b80, 0x0c0135d7, 15720 0x1b80, 0x000135d7,
13305 0x1b80, 0x0ba635e5, 15721 0x1b80, 0x000435e5,
13306 0x1b80, 0x0ba635e7, 15722 0x1b80, 0x000435e7,
13307 0x1b80, 0x000135f5, 15723 0x1b80, 0x448035f5,
13308 0x1b80, 0x000135f7, 15724 0x1b80, 0x448035f7,
15725 0x1b80, 0x47303605,
15726 0x1b80, 0x47303607,
15727 0x1b80, 0x00063615,
15728 0x1b80, 0x00063617,
15729 0x1b80, 0x776c3625,
15730 0x1b80, 0x776c3627,
15731 0x1b80, 0x00013635,
15732 0x1b80, 0x00013637,
15733 0x1b80, 0x00053645,
15734 0x1b80, 0x00053647,
15735 0x1b80, 0x5c803655,
15736 0x1b80, 0x5c803657,
15737 0x1b80, 0x5f303665,
15738 0x1b80, 0x5f303667,
15739 0x1b80, 0x00063675,
15740 0x1b80, 0x00063677,
15741 0x1b80, 0x776d3685,
15742 0x1b80, 0x776d3687,
15743 0x1b80, 0x00013695,
15744 0x1b80, 0x00013697,
15745 0x1b80, 0xb90036a5,
15746 0x1b80, 0xb90036a7,
15747 0x1b80, 0x990036b5,
15748 0x1b80, 0x990036b7,
15749 0x1b80, 0x000636c5,
15750 0x1b80, 0x000636c7,
15751 0x1b80, 0x770036d5,
15752 0x1b80, 0x770036d7,
15753 0x1b80, 0x980536e5,
15754 0x1b80, 0x980536e7,
15755 0x1b80, 0x000436f5,
15756 0x1b80, 0x000436f7,
15757 0x1b80, 0x40083705,
15758 0x1b80, 0x40083707,
15759 0x1b80, 0x4a023715,
15760 0x1b80, 0x4a023717,
15761 0x1b80, 0x30193725,
15762 0x1b80, 0x30193727,
15763 0x1b80, 0x00013735,
15764 0x1b80, 0x00013737,
15765 0x1b80, 0x7b483745,
15766 0x1b80, 0x7b483747,
15767 0x1b80, 0x7a903755,
15768 0x1b80, 0x7a903757,
15769 0x1b80, 0x79003765,
15770 0x1b80, 0x79003767,
15771 0x1b80, 0x55033775,
15772 0x1b80, 0x55033777,
15773 0x1b80, 0x33803785,
15774 0x1b80, 0x33803787,
15775 0x1b80, 0x7b383795,
15776 0x1b80, 0x7b383797,
15777 0x1b80, 0x7a8037a5,
15778 0x1b80, 0x7a8037a7,
15779 0x1b80, 0x550b37b5,
15780 0x1b80, 0x550b37b7,
15781 0x1b80, 0x338037c5,
15782 0x1b80, 0x338037c7,
15783 0x1b80, 0x7b4037d5,
15784 0x1b80, 0x7b4037d7,
15785 0x1b80, 0x7a0037e5,
15786 0x1b80, 0x7a0037e7,
15787 0x1b80, 0x551337f5,
15788 0x1b80, 0x551337f7,
15789 0x1b80, 0x74013805,
15790 0x1b80, 0x74013807,
15791 0x1b80, 0x74003815,
15792 0x1b80, 0x74003817,
15793 0x1b80, 0x8e003825,
15794 0x1b80, 0x8e003827,
15795 0x1b80, 0x00013835,
15796 0x1b80, 0x00013837,
15797 0x1b80, 0x57023845,
15798 0x1b80, 0x57023847,
15799 0x1b80, 0x57003855,
15800 0x1b80, 0x57003857,
15801 0x1b80, 0x97003865,
15802 0x1b80, 0x97003867,
15803 0x1b80, 0x00013875,
15804 0x1b80, 0x00013877,
15805 0x1b80, 0x4f783885,
15806 0x1b80, 0x4f783887,
15807 0x1b80, 0x53883895,
15808 0x1b80, 0x53883897,
15809 0x1b80, 0xe39438a5,
15810 0x1b80, 0xe39438a7,
15811 0x1b80, 0x548038b5,
15812 0x1b80, 0x548038b7,
15813 0x1b80, 0x540038c5,
15814 0x1b80, 0x540038c7,
15815 0x1b80, 0x548138d5,
15816 0x1b80, 0x548138d7,
15817 0x1b80, 0x540038e5,
15818 0x1b80, 0x540038e7,
15819 0x1b80, 0x548238f5,
15820 0x1b80, 0x548238f7,
15821 0x1b80, 0x54003905,
15822 0x1b80, 0x54003907,
15823 0x1b80, 0xe39f3915,
15824 0x1b80, 0xe39f3917,
15825 0x1b80, 0xbf1d3925,
15826 0x1b80, 0xbf1d3927,
15827 0x1b80, 0x30193935,
15828 0x1b80, 0x30193937,
15829 0x1b80, 0xe3743945,
15830 0x1b80, 0xe3743947,
15831 0x1b80, 0xe3793955,
15832 0x1b80, 0xe3793957,
15833 0x1b80, 0xe37d3965,
15834 0x1b80, 0xe37d3967,
15835 0x1b80, 0xe3843975,
15836 0x1b80, 0xe3843977,
15837 0x1b80, 0xe3de3985,
15838 0x1b80, 0xe3de3987,
15839 0x1b80, 0x55133995,
15840 0x1b80, 0x55133997,
15841 0x1b80, 0xe38039a5,
15842 0x1b80, 0xe38039a7,
15843 0x1b80, 0x551539b5,
15844 0x1b80, 0x551539b7,
15845 0x1b80, 0xe38439c5,
15846 0x1b80, 0xe38439c7,
15847 0x1b80, 0xe3de39d5,
15848 0x1b80, 0xe3de39d7,
15849 0x1b80, 0x000139e5,
15850 0x1b80, 0x000139e7,
15851 0x1b80, 0x54bf39f5,
15852 0x1b80, 0x54bf39f7,
15853 0x1b80, 0x54c03a05,
15854 0x1b80, 0x54c03a07,
15855 0x1b80, 0x54a33a15,
15856 0x1b80, 0x54a33a17,
15857 0x1b80, 0x54c13a25,
15858 0x1b80, 0x54c13a27,
15859 0x1b80, 0x54a43a35,
15860 0x1b80, 0x54a43a37,
15861 0x1b80, 0x4c183a45,
15862 0x1b80, 0x4c183a47,
15863 0x1b80, 0xbf073a55,
15864 0x1b80, 0xbf073a57,
15865 0x1b80, 0x54c23a65,
15866 0x1b80, 0x54c23a67,
15867 0x1b80, 0x54a43a75,
15868 0x1b80, 0x54a43a77,
15869 0x1b80, 0xbf043a85,
15870 0x1b80, 0xbf043a87,
15871 0x1b80, 0x54c13a95,
15872 0x1b80, 0x54c13a97,
15873 0x1b80, 0x54a33aa5,
15874 0x1b80, 0x54a33aa7,
15875 0x1b80, 0xbf013ab5,
15876 0x1b80, 0xbf013ab7,
15877 0x1b80, 0xe3ec3ac5,
15878 0x1b80, 0xe3ec3ac7,
15879 0x1b80, 0x54df3ad5,
15880 0x1b80, 0x54df3ad7,
15881 0x1b80, 0x00013ae5,
15882 0x1b80, 0x00013ae7,
15883 0x1b80, 0x54bf3af5,
15884 0x1b80, 0x54bf3af7,
15885 0x1b80, 0x54e53b05,
15886 0x1b80, 0x54e53b07,
15887 0x1b80, 0x050a3b15,
15888 0x1b80, 0x050a3b17,
15889 0x1b80, 0x54df3b25,
15890 0x1b80, 0x54df3b27,
15891 0x1b80, 0x00013b35,
15892 0x1b80, 0x00013b37,
15893 0x1b80, 0x7f403b45,
15894 0x1b80, 0x7f403b47,
15895 0x1b80, 0x7e003b55,
15896 0x1b80, 0x7e003b57,
15897 0x1b80, 0x7d003b65,
15898 0x1b80, 0x7d003b67,
15899 0x1b80, 0x55013b75,
15900 0x1b80, 0x55013b77,
15901 0x1b80, 0x5c313b85,
15902 0x1b80, 0x5c313b87,
15903 0x1b80, 0xe3803b95,
15904 0x1b80, 0xe3803b97,
15905 0x1b80, 0xe3843ba5,
15906 0x1b80, 0xe3843ba7,
15907 0x1b80, 0x54803bb5,
15908 0x1b80, 0x54803bb7,
15909 0x1b80, 0x54003bc5,
15910 0x1b80, 0x54003bc7,
15911 0x1b80, 0x54813bd5,
15912 0x1b80, 0x54813bd7,
15913 0x1b80, 0x54003be5,
15914 0x1b80, 0x54003be7,
15915 0x1b80, 0x54823bf5,
15916 0x1b80, 0x54823bf7,
15917 0x1b80, 0x54003c05,
15918 0x1b80, 0x54003c07,
15919 0x1b80, 0xe39f3c15,
15920 0x1b80, 0xe39f3c17,
15921 0x1b80, 0xbfed3c25,
15922 0x1b80, 0xbfed3c27,
15923 0x1b80, 0x30193c35,
15924 0x1b80, 0x30193c37,
15925 0x1b80, 0x74023c45,
15926 0x1b80, 0x74023c47,
15927 0x1b80, 0x003f3c55,
15928 0x1b80, 0x003f3c57,
15929 0x1b80, 0x74003c65,
15930 0x1b80, 0x74003c67,
15931 0x1b80, 0x00023c75,
15932 0x1b80, 0x00023c77,
15933 0x1b80, 0x00013c85,
15934 0x1b80, 0x00013c87,
15935 0x1b80, 0x00063c95,
15936 0x1b80, 0x00063c97,
15937 0x1b80, 0x5a803ca5,
15938 0x1b80, 0x5a803ca7,
15939 0x1b80, 0x5a003cb5,
15940 0x1b80, 0x5a003cb7,
15941 0x1b80, 0x92003cc5,
15942 0x1b80, 0x92003cc7,
15943 0x1b80, 0x00013cd5,
15944 0x1b80, 0x00013cd7,
15945 0x1b80, 0x5b8f3ce5,
15946 0x1b80, 0x5b8f3ce7,
15947 0x1b80, 0x5b0f3cf5,
15948 0x1b80, 0x5b0f3cf7,
15949 0x1b80, 0x91003d05,
15950 0x1b80, 0x91003d07,
15951 0x1b80, 0x00013d15,
15952 0x1b80, 0x00013d17,
15953 0x1b80, 0x00063d25,
15954 0x1b80, 0x00063d27,
15955 0x1b80, 0x5d803d35,
15956 0x1b80, 0x5d803d37,
15957 0x1b80, 0x5e563d45,
15958 0x1b80, 0x5e563d47,
15959 0x1b80, 0x00043d55,
15960 0x1b80, 0x00043d57,
15961 0x1b80, 0x4d083d65,
15962 0x1b80, 0x4d083d67,
15963 0x1b80, 0x57103d75,
15964 0x1b80, 0x57103d77,
15965 0x1b80, 0x57003d85,
15966 0x1b80, 0x57003d87,
15967 0x1b80, 0x4d003d95,
15968 0x1b80, 0x4d003d97,
15969 0x1b80, 0x00063da5,
15970 0x1b80, 0x00063da7,
15971 0x1b80, 0x5d003db5,
15972 0x1b80, 0x5d003db7,
15973 0x1b80, 0x00043dc5,
15974 0x1b80, 0x00043dc7,
15975 0x1b80, 0x00013dd5,
15976 0x1b80, 0x00013dd7,
15977 0x1b80, 0x549f3de5,
15978 0x1b80, 0x549f3de7,
15979 0x1b80, 0x54ff3df5,
15980 0x1b80, 0x54ff3df7,
15981 0x1b80, 0x54003e05,
15982 0x1b80, 0x54003e07,
15983 0x1b80, 0x00013e15,
15984 0x1b80, 0x00013e17,
15985 0x1b80, 0x5c313e25,
15986 0x1b80, 0x5c313e27,
15987 0x1b80, 0x07143e35,
15988 0x1b80, 0x07143e37,
15989 0x1b80, 0x54003e45,
15990 0x1b80, 0x54003e47,
15991 0x1b80, 0x5c323e55,
15992 0x1b80, 0x5c323e57,
15993 0x1b80, 0x00013e65,
15994 0x1b80, 0x00013e67,
15995 0x1b80, 0x5c323e75,
15996 0x1b80, 0x5c323e77,
15997 0x1b80, 0x07143e85,
15998 0x1b80, 0x07143e87,
15999 0x1b80, 0x54003e95,
16000 0x1b80, 0x54003e97,
16001 0x1b80, 0x5c313ea5,
16002 0x1b80, 0x5c313ea7,
16003 0x1b80, 0x00013eb5,
16004 0x1b80, 0x00013eb7,
16005 0x1b80, 0x4c983ec5,
16006 0x1b80, 0x4c983ec7,
16007 0x1b80, 0x4c183ed5,
16008 0x1b80, 0x4c183ed7,
16009 0x1b80, 0x00013ee5,
16010 0x1b80, 0x00013ee7,
16011 0x1b80, 0x5c323ef5,
16012 0x1b80, 0x5c323ef7,
16013 0x1b80, 0x62043f05,
16014 0x1b80, 0x62043f07,
16015 0x1b80, 0x63033f15,
16016 0x1b80, 0x63033f17,
16017 0x1b80, 0x66073f25,
16018 0x1b80, 0x66073f27,
16019 0x1b80, 0x7b403f35,
16020 0x1b80, 0x7b403f37,
16021 0x1b80, 0x7a003f45,
16022 0x1b80, 0x7a003f47,
16023 0x1b80, 0x79003f55,
16024 0x1b80, 0x79003f57,
16025 0x1b80, 0x7f403f65,
16026 0x1b80, 0x7f403f67,
16027 0x1b80, 0x7e003f75,
16028 0x1b80, 0x7e003f77,
16029 0x1b80, 0x7d003f85,
16030 0x1b80, 0x7d003f87,
16031 0x1b80, 0x09013f95,
16032 0x1b80, 0x09013f97,
16033 0x1b80, 0x0c013fa5,
16034 0x1b80, 0x0c013fa7,
16035 0x1b80, 0x0ba63fb5,
16036 0x1b80, 0x0ba63fb7,
16037 0x1b80, 0x00013fc5,
16038 0x1b80, 0x00013fc7,
13309 0x1b80, 0x00000006, 16039 0x1b80, 0x00000006,
13310 0x1b80, 0x00000002, 16040 0x1b80, 0x00000002,
13311}; 16041};
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c_table.h b/drivers/net/wireless/realtek/rtw88/rtw8822c_table.h
index 06e207dd8e5f..80c06c4f8184 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c_table.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c_table.h
@@ -12,6 +12,9 @@ extern const struct rtw_table rtw8822c_bb_pg_type0_tbl;
12extern const struct rtw_table rtw8822c_rf_a_tbl; 12extern const struct rtw_table rtw8822c_rf_a_tbl;
13extern const struct rtw_table rtw8822c_rf_b_tbl; 13extern const struct rtw_table rtw8822c_rf_b_tbl;
14extern const struct rtw_table rtw8822c_txpwr_lmt_type0_tbl; 14extern const struct rtw_table rtw8822c_txpwr_lmt_type0_tbl;
15extern const struct rtw_table rtw8822c_dpk_afe_no_dpk_tbl;
16extern const struct rtw_table rtw8822c_dpk_afe_is_dpk_tbl;
17extern const struct rtw_table rtw8822c_dpk_mac_bb_tbl;
15extern const struct rtw_table rtw8822c_array_mp_cal_init_tbl; 18extern const struct rtw_table rtw8822c_array_mp_cal_init_tbl;
16 19
17#endif 20#endif
diff --git a/drivers/net/wireless/realtek/rtw88/rx.c b/drivers/net/wireless/realtek/rtw88/rx.c
index 4d837f0c6d5f..48b9ed49b79a 100644
--- a/drivers/net/wireless/realtek/rtw88/rx.c
+++ b/drivers/net/wireless/realtek/rtw88/rx.c
@@ -90,6 +90,7 @@ void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
90 u8 *phy_status) 90 u8 *phy_status)
91{ 91{
92 struct ieee80211_hw *hw = rtwdev->hw; 92 struct ieee80211_hw *hw = rtwdev->hw;
93 u8 path;
93 94
94 memset(rx_status, 0, sizeof(*rx_status)); 95 memset(rx_status, 0, sizeof(*rx_status));
95 rx_status->freq = hw->conf.chandef.chan->center_freq; 96 rx_status->freq = hw->conf.chandef.chan->center_freq;
@@ -146,6 +147,10 @@ void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
146 rx_status->bw = RATE_INFO_BW_20; 147 rx_status->bw = RATE_INFO_BW_20;
147 148
148 rx_status->signal = pkt_stat->signal_power; 149 rx_status->signal = pkt_stat->signal_power;
150 for (path = 0; path < rtwdev->hal.rf_path_num; path++) {
151 rx_status->chains |= BIT(path);
152 rx_status->chain_signal[path] = pkt_stat->rx_power[path];
153 }
149 154
150 rtw_rx_addr_match(rtwdev, pkt_stat, hdr); 155 rtw_rx_addr_match(rtwdev, pkt_stat, hdr);
151} 156}
diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c
index da2d2ab8104d..7c3ae52f2b15 100644
--- a/drivers/ssb/pci.c
+++ b/drivers/ssb/pci.c
@@ -595,7 +595,7 @@ static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in)
595{ 595{
596 int i; 596 int i;
597 u16 o; 597 u16 o;
598 u16 pwr_info_offset[] = { 598 static const u16 pwr_info_offset[] = {
599 SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 599 SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1,
600 SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 600 SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3
601 }; 601 };