diff options
Diffstat (limited to 'drivers/net/wireless')
73 files changed, 8497 insertions, 3564 deletions
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 | |||
| 653 | out: | ||
| 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 | ||
| 1618 | struct 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 | |||
| 1618 | struct wmi_tlv_mgmt_tx_compl_ev { | 1634 | struct 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 | ||
| 6546 | struct wmi_10_4_chan_info_event { | 6538 | struct 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 | ||
| 160 | config 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 | |||
| 160 | config ATH9K_HTC | 176 | config 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 \ | |||
| 77 | ath9k_htc-$(CONFIG_ATH9K_HTC_DEBUGFS) += htc_drv_debug.o | 77 | ath9k_htc-$(CONFIG_ATH9K_HTC_DEBUGFS) += htc_drv_debug.o |
| 78 | 78 | ||
| 79 | obj-$(CONFIG_ATH9K_HTC) += ath9k_htc.o | 79 | obj-$(CONFIG_ATH9K_HTC) += ath9k_htc.o |
| 80 | |||
| 81 | obj-$(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 | |||
| 24 | struct owl_ctx { | ||
| 25 | struct completion eeprom_load; | ||
| 26 | }; | ||
| 27 | |||
| 28 | #define EEPROM_FILENAME_LEN 100 | ||
| 29 | |||
| 30 | #define AR5416_EEPROM_MAGIC 0xa55a | ||
| 31 | |||
| 32 | static 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 | |||
| 103 | static 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 | |||
| 134 | release: | ||
| 135 | release_firmware(fw); | ||
| 136 | } | ||
| 137 | |||
| 138 | static 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 | |||
| 156 | static 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 | |||
| 189 | static 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 | |||
| 199 | static const struct pci_device_id owl_pci_table[] = { | ||
| 200 | { PCI_VDEVICE(ATHEROS, 0xff1c) }, /* PCIe */ | ||
| 201 | { PCI_VDEVICE(ATHEROS, 0xff1d) }, /* PCI */ | ||
| 202 | { }, | ||
| 203 | }; | ||
| 204 | MODULE_DEVICE_TABLE(pci, owl_pci_table); | ||
| 205 | |||
| 206 | static struct pci_driver owl_driver = { | ||
| 207 | .name = KBUILD_MODNAME, | ||
| 208 | .id_table = owl_pci_table, | ||
| 209 | .probe = owl_probe, | ||
| 210 | .remove = owl_remove, | ||
| 211 | }; | ||
| 212 | module_pci_driver(owl_driver); | ||
| 213 | MODULE_AUTHOR("Christian Lamparter <chunkeey@gmail.com>"); | ||
| 214 | MODULE_DESCRIPTION("External EEPROM data loader for Atheros AR500X to AR92XX"); | ||
| 215 | MODULE_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 | */ | ||
| 31 | static 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 | */ | ||
| 106 | static 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 | */ |
| 87 | static void ath_dynack_compute_ackto(struct ath_hw *ah) | 124 | static 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 | */ |
| 117 | static void ath_dynack_compute_to(struct ath_hw *ah) | 146 | static 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 | */ |
| 293 | void ath_dynack_node_init(struct ath_hw *ah, struct ath_node *an) | 322 | void 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 | } |
| 305 | EXPORT_SYMBOL(ath_dynack_node_init); | 332 | EXPORT_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 | } |
| 321 | EXPORT_SYMBOL(ath_dynack_node_deinit); | 348 | EXPORT_SYMBOL(ath_dynack_node_deinit); |
| 322 | 349 | ||
| @@ -327,22 +354,26 @@ EXPORT_SYMBOL(ath_dynack_node_deinit); | |||
| 327 | */ | 354 | */ |
| 328 | void ath_dynack_reset(struct ath_hw *ah) | 355 | void 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 | } |
| 347 | EXPORT_SYMBOL(ath_dynack_reset); | 378 | EXPORT_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 | ||
| 466 | static u32 ath9k_reg_rmw_single(void *hw_priv, | 466 | static 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 | ||
| 491 | static u32 ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr) | 489 | static 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, | |||
| 1107 | static void carl9170_usb_disconnect(struct usb_interface *intf) | 1107 | static 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 | } |
| 700 | out: | 706 | out: |
| 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: | |||
| 1257 | static int wcn36xx_smd_config_bss_v1(struct wcn36xx *wcn, | 1264 | static 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 | } |
| 1536 | out: | 1559 | out: |
| 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 | |||
| 28 | bool disable_ap_sme; | 44 | bool disable_ap_sme; |
| 29 | module_param(disable_ap_sme, bool, 0444); | 45 | module_param(disable_ap_sme, bool, 0444); |
| 30 | MODULE_PARM_DESC(disable_ap_sme, " let user space handle AP mode SME"); | 46 | MODULE_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 */ | ||
| 71 | enum wil_rx_cb_mode { | ||
| 72 | WIL_RX_CB_MODE_DMG, | ||
| 73 | WIL_RX_CB_MODE_EDMG, | ||
| 74 | WIL_RX_CB_MODE_WIDE, | ||
| 75 | }; | ||
| 76 | |||
| 77 | static 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 | |||
| 90 | static 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 | |||
| 54 | static void | 103 | static void |
| 55 | wil_memdup_ie(u8 **pdst, size_t *pdst_len, const u8 *src, size_t src_len) | 104 | wil_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 | ||
| 280 | int wil_iftype_nl2wmi(enum nl80211_iftype type) | 338 | int 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 | ||
| 361 | int 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 | |||
| 401 | int 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 | |||
| 303 | int wil_cid_fill_sinfo(struct wil6210_vif *vif, int cid, | 441 | int 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 | */ |
| 399 | static int wil_find_cid_by_idx(struct wil6210_priv *wil, u8 mid, int idx) | 547 | int 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 | ||
| 1173 | static 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 | |||
| 1025 | static int wil_cfg80211_connect(struct wiphy *wiphy, | 1200 | static 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: | |||
| 1728 | static int _wil_cfg80211_start_ap(struct wiphy *wiphy, | 1919 | static 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 | ||
| 963 | static 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 | |||
| 968 | static 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 */ |
| 964 | static ssize_t wil_write_file_txmgmt(struct file *file, const char __user *buf, | 977 | static 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 | ||
| 223 | void wil_vif_free(struct wil6210_vif *vif) | 224 | void 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 | ||
| 458 | if_remove: | ||
| 459 | wil_if_remove(wil); | ||
| 460 | bus_disable: | 458 | bus_disable: |
| 461 | wil_if_pcie_disable(wil); | 459 | wil_if_pcie_disable(wil); |
| 462 | err_iounmap: | 460 | err_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 | |||
| 436 | int 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); | |||
| 25 | int wil_pmc_last_cmd_status(struct wil6210_priv *wil); | 25 | int wil_pmc_last_cmd_status(struct wil6210_priv *wil); |
| 26 | ssize_t wil_pmc_read(struct file *, char __user *, size_t, loff_t *); | 26 | ssize_t wil_pmc_read(struct file *, char __user *, size_t, loff_t *); |
| 27 | loff_t wil_pmc_llseek(struct file *filp, loff_t off, int whence); | 27 | loff_t wil_pmc_llseek(struct file *filp, loff_t off, int whence); |
| 28 | int 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 | */ | ||
| 733 | static 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 | |||
| 771 | static 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 | |||
| 793 | static 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 | |||
| 815 | void 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 | |||
| 848 | void 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 | |||
| 886 | static 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 | */ |
| 731 | void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev) | 907 | void 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 | ||
| 1002 | void 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 | |||
| 438 | enum { | ||
| 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 | |||
| 448 | struct wil_1x_hdr { | ||
| 449 | u8 version; | ||
| 450 | u8 type; | ||
| 451 | __be16 length; | ||
| 452 | /* followed by data */ | ||
| 453 | } __packed; | ||
| 454 | |||
| 455 | struct 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 | |||
| 426 | struct vring_rx_dma { | 466 | struct 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 | ||
| 648 | void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev); | 688 | void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev); |
| 689 | void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid, | ||
| 690 | struct wil_net_stats *stats, bool gro); | ||
| 649 | void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb); | 691 | void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb); |
| 650 | void wil_rx_bar(struct wil6210_priv *wil, struct wil6210_vif *vif, | 692 | void 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 | ||
| 223 | static inline | 223 | static inline |
| 224 | void wil_get_next_rx_status_msg(struct wil_status_ring *sring, void *msg) | 224 | void 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 | ||
| 230 | static inline void wil_sring_advance_swhead(struct wil_status_ring *sring) | 237 | static 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 | ||
| 880 | again: | 886 | again: |
| 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 | ||
| 1135 | static inline void | 1142 | static inline void |
| 1136 | wil_get_next_tx_status_msg(struct wil_status_ring *sring, | 1143 | wil_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 | ||
| 369 | static 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 | |||
| 369 | static inline u16 wil_rx_status_get_flow_id(void *msg) | 375 | static 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 | ||
| 418 | static 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 | |||
| 424 | static inline int wil_rx_status_get_eop(void *msg) /* EoP = End of Packet */ | 424 | static 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 | ||
| 734 | enum 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 | */ |
| 1147 | static inline bool wil_cid_valid(struct wil6210_priv *wil, u8 cid) | 1160 | static 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); | |||
| 1224 | void wil_refresh_fw_capabilities(struct wil6210_priv *wil); | 1237 | void wil_refresh_fw_capabilities(struct wil6210_priv *wil); |
| 1225 | void wil_mbox_ring_le2cpus(struct wil6210_mbox_ring *r); | 1238 | void wil_mbox_ring_le2cpus(struct wil6210_mbox_ring *r); |
| 1226 | int wil_find_cid(struct wil6210_priv *wil, u8 mid, const u8 *mac); | 1239 | int wil_find_cid(struct wil6210_priv *wil, u8 mid, const u8 *mac); |
| 1240 | int wil_find_cid_by_idx(struct wil6210_priv *wil, u8 mid, int idx); | ||
| 1227 | void wil_set_ethtoolops(struct net_device *ndev); | 1241 | void wil_set_ethtoolops(struct net_device *ndev); |
| 1228 | 1242 | ||
| 1229 | struct fw_map *wil_find_fw_mapping(const char *section); | 1243 | struct fw_map *wil_find_fw_mapping(const char *section); |
| @@ -1335,7 +1349,7 @@ void wil_p2p_wdev_free(struct wil6210_priv *wil); | |||
| 1335 | 1349 | ||
| 1336 | int wmi_set_mac_address(struct wil6210_priv *wil, void *addr); | 1350 | int wmi_set_mac_address(struct wil6210_priv *wil, void *addr); |
| 1337 | int wmi_pcp_start(struct wil6210_vif *vif, int bi, u8 wmi_nettype, u8 chan, | 1351 | int 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); |
| 1339 | int wmi_pcp_stop(struct wil6210_vif *vif); | 1353 | int wmi_pcp_stop(struct wil6210_vif *vif); |
| 1340 | int wmi_led_cfg(struct wil6210_priv *wil, bool enable); | 1354 | int wmi_led_cfg(struct wil6210_priv *wil, bool enable); |
| 1341 | int wmi_abort_scan(struct wil6210_vif *vif); | 1355 | int wmi_abort_scan(struct wil6210_vif *vif); |
| @@ -1349,6 +1363,7 @@ void wil6210_disconnect_complete(struct wil6210_vif *vif, const u8 *bssid, | |||
| 1349 | void wil_probe_client_flush(struct wil6210_vif *vif); | 1363 | void wil_probe_client_flush(struct wil6210_vif *vif); |
| 1350 | void wil_probe_client_worker(struct work_struct *work); | 1364 | void wil_probe_client_worker(struct work_struct *work); |
| 1351 | void wil_disconnect_worker(struct work_struct *work); | 1365 | void wil_disconnect_worker(struct work_struct *work); |
| 1366 | void wil_enable_tx_key_worker(struct work_struct *work); | ||
| 1352 | 1367 | ||
| 1353 | void wil_init_txrx_ops(struct wil6210_priv *wil); | 1368 | void 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); |
| 1366 | netdev_tx_t wil_start_xmit(struct sk_buff *skb, struct net_device *ndev); | 1381 | netdev_tx_t wil_start_xmit(struct sk_buff *skb, struct net_device *ndev); |
| 1367 | int wil_tx_complete(struct wil6210_vif *vif, int ringid); | 1382 | int wil_tx_complete(struct wil6210_vif *vif, int ringid); |
| 1383 | void wil_tx_complete_handle_eapol(struct wil6210_vif *vif, | ||
| 1384 | struct sk_buff *skb); | ||
| 1368 | void wil6210_unmask_irq_tx(struct wil6210_priv *wil); | 1385 | void wil6210_unmask_irq_tx(struct wil6210_priv *wil); |
| 1369 | void wil6210_unmask_irq_tx_edma(struct wil6210_priv *wil); | 1386 | void 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); |
| 1413 | int wmi_rbufcap_cfg(struct wil6210_priv *wil, bool enable, u16 threshold); | 1430 | int wmi_rbufcap_cfg(struct wil6210_priv *wil, bool enable, u16 threshold); |
| 1414 | 1431 | ||
| 1432 | int wil_wmi2spec_ch(u8 wmi_ch, u8 *spec_ch); | ||
| 1433 | int wil_spec2wmi_ch(u8 spec_ch, u8 *wmi_ch); | ||
| 1434 | void wil_update_supported_bands(struct wil6210_priv *wil); | ||
| 1435 | |||
| 1415 | int reverse_memcmp(const void *cs, const void *ct, size_t count); | 1436 | int 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 | ||
| 2166 | int wmi_pcp_start(struct wil6210_vif *vif, | 2185 | int 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 | ||
| 366 | enum 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 */ |
| 365 | struct wmi_connect_cmd { | 380 | struct 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 | ||
| 408 | struct wmi_add_cipher_key_cmd { | 429 | struct 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 */ |
| 2314 | struct wmi_connect_event { | 2335 | struct 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. */ |
| 254 | void brcmf_rx_event(struct device *dev, struct sk_buff *rxp); | 254 | void brcmf_rx_event(struct device *dev, struct sk_buff *rxp); |
| 255 | 255 | ||
| 256 | int 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. */ |
| 257 | int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings); | 258 | int 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 */ |
| 259 | void brcmf_detach(struct device *dev); | 260 | void brcmf_detach(struct device *dev); |
| 261 | void 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 */ |
| 261 | void brcmf_dev_reset(struct device *dev); | 263 | void 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 | */ |
| 293 | struct brcmf_cfg80211_info { | 293 | struct 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 | ||
| 1212 | int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings) | 1212 | int 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 | |||
| 1241 | int 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 | ||
| 1268 | fail: | 1280 | fail: |
| 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 | |||
| 1366 | void 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 | |||
| 1832 | fail: | 1836 | fail: |
| 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 | ||
| 4266 | free: | ||
| 4267 | brcmf_free(sdiod->dev); | ||
| 4268 | claim: | ||
| 4269 | sdio_claim_host(sdiod->func1); | ||
| 4261 | checkdied: | 4270 | checkdied: |
| 4262 | brcmf_sdio_checkdied(bus); | 4271 | brcmf_sdio_checkdied(bus); |
| 4263 | release: | 4272 | release: |
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 | ||
| 1280 | fail: | 1287 | fail: |
| 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, | |||
| 86 | static int lbs_mesh_config(struct lbs_private *priv, uint16_t action, | 86 | static 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 | ||
| 25 | static inline bool lbs_mesh_activated(struct lbs_private *priv) | 25 | static 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 | ||
| 31 | int lbs_mesh_set_channel(struct lbs_private *priv, u8 channel); | 30 | int 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 | ||
| 36 | static 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 | |||
| 57 | static long _rtl92ce_signal_scale_mapping(struct ieee80211_hw *hw, | 36 | static 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 | ||
| 580 | static 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 | |||
| 596 | static long _rtl92c_signal_scale_mapping(struct ieee80211_hw *hw, | 580 | static 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 | |||
| 60 | enum version_8192d { | 29 | enum 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 | ||
| 35 | static 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 | |||
| 50 | static long _rtl92de_translate_todbm(struct ieee80211_hw *hw, | 36 | static 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, | |||
| 260 | bool rtl8723e_rx_query_desc(struct ieee80211_hw *hw, | 260 | bool 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 | ||
| 521 | void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw, | 523 | void 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 | ||
| 586 | void rtl8723e_set_desc(struct ieee80211_hw *hw, u8 *pdesc, | 589 | void 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 | ||
| 624 | u64 rtl8723e_get_desc(struct ieee80211_hw *hw, | 629 | u64 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) \ | 17 | static 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) | 22 | static 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) \ | 27 | static 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) | 32 | static 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 | 37 | static 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) \ | 42 | static 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) | 47 | static 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) \ | 52 | static 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) | 57 | static 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) | 62 | static 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) \ | 67 | static 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) | 72 | static 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) \ | 77 | static 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) | 82 | static 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) | 87 | static 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) \ | 92 | static 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) | 97 | static 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) \ | 102 | static 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) | 107 | static 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) \ | 113 | static 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) | 118 | static 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) | 123 | static 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) \ | 128 | static 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) | 133 | static 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) \ | 138 | static 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) | 143 | static 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) \ | 148 | static 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) | 153 | static 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) \ | 158 | static 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) \ | 163 | static 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) | 168 | static 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) \ | 173 | static 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) | 178 | static 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) \ | 183 | static 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) | 188 | static 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) \ | 193 | static 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) | 198 | static 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) \ | 203 | static 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) \ | 208 | static 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) | 213 | static 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) \ | 218 | static 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) \ | 223 | static 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) | 228 | static 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) \ | 233 | static 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) | 238 | static 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) | 243 | static 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) \ | 248 | static 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) | 253 | static 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) | 258 | static 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) \ | 263 | static 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) | 268 | static 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 | 273 | static 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) \ | 278 | static 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) | 283 | static 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) | 288 | static 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) \ | 293 | static 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) \ | 298 | static 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) \ | 303 | static 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) \ | 308 | static 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) \ | 313 | static 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) \ | 318 | static 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) | 323 | static 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) \ | 328 | static 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) \ | ||
| 491 | do { \ | ||
| 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 | ||
| 498 | struct rx_fwinfo_8723e { | 336 | struct 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 | ||
| 28 | static void _rtl8723be_query_rxphystatus(struct ieee80211_hw *hw, | 28 | static 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, | |||
| 189 | static void _rtl8723be_translate_rx_signal_stuff(struct ieee80211_hw *hw, | 190 | static 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 | ||
| 244 | static void _rtl8723be_insert_emcontent(struct rtl_tcb_desc *ptcb_desc, | 245 | static 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 | ||
| 295 | bool rtl8723be_rx_query_desc(struct ieee80211_hw *hw, | 296 | bool 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 | ||
| 402 | void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw, | 404 | void 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 | ||
| 587 | void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, | 589 | void 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 | ||
| 639 | void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc, | 642 | void 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 | ||
| 677 | u64 rtl8723be_get_desc(struct ieee80211_hw *hw, | 682 | u64 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) \ | 17 | static 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) | 22 | static 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) \ | 27 | static 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) | 32 | static 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 | 37 | static 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) \ | 42 | static 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) | 47 | static 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) \ | 52 | static 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) | 57 | static 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) | 62 | static 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) \ | 67 | static 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) | 72 | static 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 | 77 | static 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) | 82 | static 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) \ | 87 | static 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) | 92 | static 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) \ | 97 | static 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) | 102 | static 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) \ | 107 | static 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) | 112 | static 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) \ | 117 | static 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) | 122 | static 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) \ | 127 | static 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) | 132 | static 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) \ | 137 | static 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) | 142 | static 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) \ | 147 | static 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) | 152 | static 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) \ | 157 | static 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) | 162 | static 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 | 167 | static 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) \ | 172 | static 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) | 177 | static 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) | 182 | static 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) \ | 187 | static 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 | 192 | static 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) | 197 | static 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 | 202 | static 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) | 207 | static 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) \ | 212 | static 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) | 217 | static 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) \ | 222 | static 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) | 227 | static 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 | 232 | static 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) \ | 237 | static 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) \ | 242 | static 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) | 247 | static 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) \ | 252 | static 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) | 257 | static 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) \ | 262 | static 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) | 267 | static 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) \ | 272 | static 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) | 277 | static 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) \ | 282 | static 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 | 287 | static 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) \ | 292 | static 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) | 297 | static 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) | 302 | static 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 | 307 | static 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) \ | 312 | static 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) \ | 317 | static 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) \ | 322 | static 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) \ | 327 | static 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 | |||
| 332 | static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc) | ||
| 333 | { | ||
| 334 | return le32_to_cpu(*((__pdesc + 6))); | ||
| 335 | } | ||
| 336 | |||
| 337 | static 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) \ | 344 | static 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) | 349 | static 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) | 354 | static 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) \ | 359 | static 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) | 364 | static 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)); |
| 356 | do { \ | 367 | } |
| 357 | if (_size > TX_DESC_NEXT_DESC_OFFSET) \ | 368 | |
| 358 | memset(__pdesc, 0, TX_DESC_NEXT_DESC_OFFSET); \ | 369 | static 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 | |||
| 374 | static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value) | ||
| 375 | { | ||
| 376 | le32p_replace_bits((__paddr + 1), __value, GENMASK(7, 0)); | ||
| 377 | } | ||
| 378 | |||
| 379 | static inline void set_earlymode_len3(__le32 *__paddr, u32 __value) | ||
| 380 | { | ||
| 381 | le32p_replace_bits((__paddr + 1), __value, GENMASK(19, 8)); | ||
| 382 | } | ||
| 383 | |||
| 384 | static inline void set_earlymode_len4(__le32 *__paddr, u32 __value) | ||
| 385 | { | ||
| 386 | le32p_replace_bits((__paddr + 1), __value, GENMASK(31, 20)); | ||
| 387 | } | ||
| 388 | |||
| 389 | static 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 | ||
| 363 | struct phy_rx_agc_info_t { | 397 | struct 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 | ||
| 3614 | u8 _rtl8812ae_get_right_chnl_place_for_iqk(u8 chnl) | 3614 | u8 _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 | ||
| 724 | static u32 rtw_coex_read_indirect_reg(struct rtw_dev *rtwdev, u16 addr) | 724 | u32 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 | ||
| 348 | void rtw_coex_info_response(struct rtw_dev *rtwdev, struct sk_buff *skb); | 348 | void rtw_coex_info_response(struct rtw_dev *rtwdev, struct sk_buff *skb); |
| 349 | u32 rtw_coex_read_indirect_reg(struct rtw_dev *rtwdev, u16 addr); | ||
| 349 | void rtw_coex_write_indirect_reg(struct rtw_dev *rtwdev, u16 addr, | 350 | void rtw_coex_write_indirect_reg(struct rtw_dev *rtwdev, u16 addr, |
| 350 | u32 mask, u32 val); | 351 | u32 mask, u32 val); |
| 351 | void rtw_coex_write_scbd(struct rtw_dev *rtwdev, u16 bitpos, bool set); | 352 | void 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 | |||
| 1088 | DECLARE_EWMA(thermal, 10, 4); | ||
| 1089 | |||
| 1090 | struct 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 | |||
| 1114 | struct 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 | ||
| 1113 | struct rtw_efuse { | 1162 | struct 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 | ||
| 1396 | static inline bool rtw_is_assoc(struct rtw_dev *rtwdev) | ||
| 1397 | { | ||
| 1398 | return !!rtwdev->sta_cnt; | ||
| 1399 | } | ||
| 1400 | |||
| 1347 | void rtw_get_channel_params(struct cfg80211_chan_def *chandef, | 1401 | void rtw_get_channel_params(struct cfg80211_chan_def *chandef, |
| 1348 | struct rtw_channel_params *ch_param); | 1402 | struct rtw_channel_params *ch_param); |
| 1349 | bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target); | 1403 | bool 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 | ||
| 114 | static 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 | |||
| 114 | void rtw_phy_init(struct rtw_dev *rtwdev) | 127 | void 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 | ||
| 134 | void rtw_phy_dig_write(struct rtw_dev *rtwdev, u8 igi) | 148 | void 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 | ||
| 456 | static 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 | |||
| 468 | static 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 | |||
| 489 | static 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 | |||
| 510 | static 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 | |||
| 518 | static 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 | |||
| 442 | void rtw_phy_dynamic_mechanism(struct rtw_dev *rtwdev) | 542 | void 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, | |||
| 1316 | static void rtw_load_rfk_table(struct rtw_dev *rtwdev) | 1418 | static 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 | ||
| 1326 | void rtw_phy_load_tables(struct rtw_dev *rtwdev) | 1437 | void 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 | ||
| 1544 | static 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 | |||
| 1433 | static u8 rtw_phy_get_2g_tx_power_index(struct rtw_dev *rtwdev, | 1575 | static 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 | ||
| 1005 | static void rtw8822b_phy_calibration(struct rtw_dev *rtwdev) | ||
| 1006 | { | ||
| 1007 | rtw8822b_do_iqk(rtwdev); | ||
| 1008 | } | ||
| 1009 | |||
| 1004 | static void rtw8822b_coex_cfg_init(struct rtw_dev *rtwdev) | 1010 | static 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 | ||
| 17 | static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, | 18 | static 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 | ||
| 1873 | static void rtw8822c_do_iqk(struct rtw_dev *rtwdev) | 1881 | static 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, ¶); | ||
| 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 | ||
| 2056 | struct dpk_cfg_pair { | ||
| 2057 | u32 addr; | ||
| 2058 | u32 bitmask; | ||
| 2059 | u32 data; | ||
| 2060 | }; | ||
| 2061 | |||
| 2062 | void 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 | |||
| 2074 | static 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 | |||
| 2090 | static void | ||
| 2091 | rtw8822c_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 | |||
| 2099 | static void | ||
| 2100 | rtw8822c_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 | |||
| 2112 | static 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 | |||
| 2126 | static 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 | |||
| 2140 | static 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 | |||
| 2154 | static 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 | |||
| 2163 | static 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 | |||
| 2188 | static 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 | |||
| 2204 | static 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 | |||
| 2210 | static 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 | |||
| 2218 | static 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 | |||
| 2237 | static 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 | |||
| 2275 | static 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 | |||
| 2300 | static 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 | |||
| 2341 | static 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 | |||
| 2353 | static 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 | |||
| 2363 | static 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 | |||
| 2386 | static 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 | |||
| 2412 | static 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 | |||
| 2427 | static 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 | |||
| 2444 | static 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 | |||
| 2461 | struct 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 | |||
| 2471 | static 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 | |||
| 2493 | check_end: | ||
| 2494 | data->agc_cnt++; | ||
| 2495 | if (data->agc_cnt >= 6) | ||
| 2496 | state = RTW_DPK_AGC_OUT; | ||
| 2497 | |||
| 2498 | return state; | ||
| 2499 | } | ||
| 2500 | |||
| 2501 | static 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 | |||
| 2516 | static 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 | |||
| 2531 | static 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 | |||
| 2550 | static 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 | |||
| 2556 | static 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 | |||
| 2562 | static 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 | |||
| 2574 | static 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 | |||
| 2580 | static 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 | |||
| 2601 | static 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 | |||
| 2611 | static 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 | |||
| 2628 | static 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 | |||
| 2635 | static 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 | |||
| 2647 | static 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 | |||
| 2662 | static 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 | |||
| 2680 | static 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 | |||
| 2703 | static 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 | |||
| 2721 | static 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 | |||
| 2759 | static 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 | |||
| 2776 | static 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 | |||
| 2846 | void 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 | |||
| 2879 | static 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 | |||
| 2892 | static 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 | |||
| 2911 | static 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 | |||
| 2931 | static 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 | |||
| 2952 | static 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 | |||
| 2961 | static 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 | |||
| 2983 | static 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 | |||
| 3020 | static 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 | |||
| 3039 | static 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 | |||
| 3081 | static void rtw8822c_phy_calibration(struct rtw_dev *rtwdev) | ||
| 3082 | { | ||
| 3083 | rtw8822c_do_iqk(rtwdev); | ||
| 3084 | rtw8822c_do_dpk(rtwdev); | ||
| 3085 | } | ||
| 3086 | |||
| 3087 | void 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 | |||
| 3119 | static const struct rtw_phy_cck_pd_reg | ||
| 3120 | rtw8822c_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 | ||
| 3135 | static void | ||
| 3136 | rtw8822c_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 | |||
| 3168 | static 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 | |||
| 2032 | static struct rtw_pwr_seq_cmd trans_carddis_to_cardemu_8822c[] = { | 3194 | static 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 | ||
| 99 | enum 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 | |||
| 109 | enum 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 | |||
| 118 | void rtw8822c_parse_tbl_dpk(struct rtw_dev *rtwdev, | ||
| 119 | const struct rtw_table *tbl); | ||
| 120 | |||
| 121 | #define RTW_DECL_TABLE_DPK(name) \ | ||
| 122 | const 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 | ||
| 9 | static const u32 rtw8822c_mac[] = { | 10 | static const u32 rtw8822c_mac[] = { |
| @@ -13,69 +14,69 @@ RTW_DECL_TABLE_PHY_COND(rtw8822c_mac, rtw_phy_cfg_mac); | |||
| 13 | 14 | ||
| 14 | static const u32 rtw8822c_agc[] = { | 15 | static 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 | ||
| 1761 | RTW_DECL_TABLE_PHY_COND(rtw8822c_bb, rtw_phy_cfg_bb); | 1763 | RTW_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 | ||
| 5680 | RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_a, A); | 6709 | RTW_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 | ||
| 9404 | RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_b, B); | 11715 | RTW_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 | ||
| 11164 | RTW_DECL_TABLE_TXPWR_LMT(rtw8822c_txpwr_lmt_type0); | 13475 | RTW_DECL_TABLE_TXPWR_LMT(rtw8822c_txpwr_lmt_type0); |
| 11165 | 13476 | ||
| 13477 | static 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 | |||
| 13515 | RTW_DECL_TABLE_DPK(rtw8822c_dpk_afe_no_dpk); | ||
| 13516 | |||
| 13517 | static 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 | |||
| 13559 | RTW_DECL_TABLE_DPK(rtw8822c_dpk_afe_is_dpk); | ||
| 13560 | |||
| 13561 | static 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 | |||
| 13578 | RTW_DECL_TABLE_DPK(rtw8822c_dpk_mac_bb); | ||
| 13579 | |||
| 11166 | static const u32 rtw8822c_array_mp_cal_init[] = { | 13580 | static 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; | |||
| 12 | extern const struct rtw_table rtw8822c_rf_a_tbl; | 12 | extern const struct rtw_table rtw8822c_rf_a_tbl; |
| 13 | extern const struct rtw_table rtw8822c_rf_b_tbl; | 13 | extern const struct rtw_table rtw8822c_rf_b_tbl; |
| 14 | extern const struct rtw_table rtw8822c_txpwr_lmt_type0_tbl; | 14 | extern const struct rtw_table rtw8822c_txpwr_lmt_type0_tbl; |
| 15 | extern const struct rtw_table rtw8822c_dpk_afe_no_dpk_tbl; | ||
| 16 | extern const struct rtw_table rtw8822c_dpk_afe_is_dpk_tbl; | ||
| 17 | extern const struct rtw_table rtw8822c_dpk_mac_bb_tbl; | ||
| 15 | extern const struct rtw_table rtw8822c_array_mp_cal_init_tbl; | 18 | extern 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 | } |
