From patchwork Thu Feb 14 08:58:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812047 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 274D51399 for ; Thu, 14 Feb 2019 08:59:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 158242D1F6 for ; Thu, 14 Feb 2019 08:59:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 099352D460; Thu, 14 Feb 2019 08:59:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E51672D466 for ; Thu, 14 Feb 2019 08:59:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730106AbfBNI7e (ORCPT ); Thu, 14 Feb 2019 03:59:34 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39564 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728615AbfBNI7d (ORCPT ); Thu, 14 Feb 2019 03:59:33 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xCMR005822, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xCMR005822 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:12 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:11 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 01/24] rtw88: report correct tx status if mac80211 requested one Date: Thu, 14 Feb 2019 16:58:40 +0800 Message-ID: <1550134743-17443-2-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang Before this commit, driver always reports IEEE80211_TX_STAT_ACK for every tx packet, but it will confuse the mac80211 stack for connection monitor system. mac80211 stack needs correct ack information about some specific packets such as prop_req, null, auth, assoc, in order to know if AP is alive. And for such packets, mac80211 will pass a tx flag IEEE80211_TX_CTL_REQ_TX_STATUS to driver. Driver then need to request a tx report from hardware. The tx report is not passed by hardware with the tx'ed packet, it is passed through C2H. So driver need to queue the packets that require correct tx report and upon the tx report is received, report to mac80211 stack, with the frame is acked or not. In case of driver missed the C2H report, setup a 500ms timer to purge the tx report skb queue (500ms is time mac80211 used as probe_time). Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/fw.c | 21 ++++++- drivers/net/wireless/realtek/rtw88/fw.h | 8 +++ drivers/net/wireless/realtek/rtw88/main.c | 10 ++++ drivers/net/wireless/realtek/rtw88/main.h | 13 +++++ drivers/net/wireless/realtek/rtw88/pci.c | 15 ++++- drivers/net/wireless/realtek/rtw88/pci.h | 1 + drivers/net/wireless/realtek/rtw88/tx.c | 96 +++++++++++++++++++++++++++++++ drivers/net/wireless/realtek/rtw88/tx.h | 8 +++ 8 files changed, 170 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c index 4440f18..68c422b 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.c +++ b/drivers/net/wireless/realtek/rtw88/fw.c @@ -8,6 +8,25 @@ #include "reg.h" #include "debug.h" +void rtw_fw_c2h_cmd_handle_ext(struct rtw_dev *rtwdev, struct sk_buff *skb) +{ + struct rtw_c2h_cmd *c2h; + u32 pkt_offset; + u8 sub_cmd_id; + + pkt_offset = *((u32 *)skb->cb); + c2h = (struct rtw_c2h_cmd *)(skb->data + pkt_offset); + sub_cmd_id = c2h->payload[0]; + + switch (sub_cmd_id) { + case C2H_CCX_RPT: + rtw_tx_report_handle(rtwdev, skb); + break; + default: + break; + } +} + void rtw_fw_c2h_cmd_handle(struct rtw_dev *rtwdev, struct sk_buff *skb) { struct rtw_c2h_cmd *c2h; @@ -23,7 +42,7 @@ void rtw_fw_c2h_cmd_handle(struct rtw_dev *rtwdev, struct sk_buff *skb) switch (c2h->id) { case C2H_HALMAC: - /* halmac needs rx_desc + c2h payload */ + rtw_fw_c2h_cmd_handle_ext(rtwdev, skb); break; default: break; diff --git a/drivers/net/wireless/realtek/rtw88/fw.h b/drivers/net/wireless/realtek/rtw88/fw.h index 983c618..89950c7 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.h +++ b/drivers/net/wireless/realtek/rtw88/fw.h @@ -40,6 +40,10 @@ enum rtw_c2h_cmd_id { C2H_HALMAC = 0xff, }; +enum rtw_c2h_cmd_id_ext { + C2H_CCX_RPT = 0x0f, +}; + struct rtw_c2h_cmd { u8 id; u8 seq; @@ -80,6 +84,10 @@ struct rtw_rsvd_page { bool add_txdesc; }; +/* C2H */ +#define GET_CCX_REPORT_SEQNUM(c2h_payload) (c2h_payload[8] & 0xfc) +#define GET_CCX_REPORT_STATUS(c2h_payload) (c2h_payload[9] & 0xc0) + /* PKT H2C */ #define H2C_PKT_CMD_ID 0xFF #define H2C_PKT_CATEGORY 0x01 diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index 8409502..5b2be74 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -1082,14 +1082,19 @@ int rtw_core_init(struct rtw_dev *rtwdev) INIT_LIST_HEAD(&rtwdev->rsvd_page_list); + timer_setup(&rtwdev->tx_report.purge_timer, + rtw_tx_report_purge_timer, 0); + INIT_DELAYED_WORK(&rtwdev->watch_dog_work, rtw_watch_dog_work); INIT_DELAYED_WORK(&rtwdev->lps_work, rtw_lps_work); INIT_WORK(&rtwdev->c2h_work, rtw_c2h_work); skb_queue_head_init(&rtwdev->c2h_queue); + skb_queue_head_init(&rtwdev->tx_report.queue); spin_lock_init(&rtwdev->dm_lock); spin_lock_init(&rtwdev->rf_lock); spin_lock_init(&rtwdev->h2c.lock); + spin_lock_init(&rtwdev->tx_report.q_lock); mutex_init(&rtwdev->mutex); mutex_init(&rtwdev->hal.tx_power_mutex); @@ -1121,10 +1126,15 @@ void rtw_core_deinit(struct rtw_dev *rtwdev) { struct rtw_fw_state *fw = &rtwdev->fw; struct rtw_rsvd_page *rsvd_pkt, *tmp; + unsigned long flags; if (fw->firmware) release_firmware(fw->firmware); + spin_lock_irqsave(&rtwdev->tx_report.q_lock, flags); + skb_queue_purge(&rtwdev->tx_report.queue); + spin_unlock_irqrestore(&rtwdev->tx_report.q_lock, flags); + list_for_each_entry_safe(rsvd_pkt, tmp, &rtwdev->rsvd_page_list, list) { list_del(&rsvd_pkt->list); kfree(rsvd_pkt); diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h index 65eeb53..808eaa6 100644 --- a/drivers/net/wireless/realtek/rtw88/main.h +++ b/drivers/net/wireless/realtek/rtw88/main.h @@ -448,6 +448,7 @@ struct rtw_tx_pkt_info { u8 qsel; u8 bw; u8 sec_type; + u8 sn; bool ampdu_en; u8 ampdu_factor; u8 ampdu_density; @@ -460,6 +461,7 @@ struct rtw_tx_pkt_info { bool ls; bool fs; bool short_gi; + bool report; }; struct rtw_rx_pkt_stat { @@ -548,6 +550,14 @@ struct rtw_sec_desc { DECLARE_BITMAP(cam_map, RTW_MAX_SEC_CAM_NUM); }; +struct rtw_tx_report { + /* protect the tx report queue */ + spinlock_t q_lock; + struct sk_buff_head queue; + atomic_t sn; + struct timer_list purge_timer; +}; + #define RTW_BC_MC_MACID 1 DECLARE_EWMA(rssi, 10, 16); @@ -1020,6 +1030,8 @@ struct rtw_dev { struct sk_buff_head c2h_queue; struct work_struct c2h_work; + struct rtw_tx_report tx_report; + struct { /* incicate the mail box to use with fw */ u8 last_box_num; @@ -1106,6 +1118,7 @@ void rtw_get_channel_params(struct cfg80211_chan_def *chandef, void rtw_set_channel(struct rtw_dev *rtwdev); void rtw_vif_port_config(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif, u32 config); +void rtw_tx_report_purge_timer(struct timer_list *t); void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si); int rtw_core_start(struct rtw_dev *rtwdev); void rtw_core_stop(struct rtw_dev *rtwdev); diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c index 8dd51d7..cf3bffb 100644 --- a/drivers/net/wireless/realtek/rtw88/pci.c +++ b/drivers/net/wireless/realtek/rtw88/pci.c @@ -598,6 +598,7 @@ static int rtw_pci_xmit(struct rtw_dev *rtwdev, tx_data = rtw_pci_get_tx_data(skb); tx_data->dma = dma; + tx_data->sn = pkt_info->sn; skb_queue_tail(&ring->queue, skb); /* kick off tx queue */ @@ -729,8 +730,20 @@ static void rtw_pci_tx_isr(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci, skb_pull(skb, rtwdev->chip->tx_pkt_desc_sz); info = IEEE80211_SKB_CB(skb); + + /* enqueue to wait for tx report */ + if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) { + rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn); + continue; + } + + /* always ACK for others, then they won't be marked as drop */ + if (info->flags & IEEE80211_TX_CTL_NO_ACK) + info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED; + else + info->flags |= IEEE80211_TX_STAT_ACK; + ieee80211_tx_info_clear_status(info); - info->flags |= IEEE80211_TX_STAT_ACK; ieee80211_tx_status_irqsafe(hw, skb); } diff --git a/drivers/net/wireless/realtek/rtw88/pci.h b/drivers/net/wireless/realtek/rtw88/pci.h index 367197c..48bb927 100644 --- a/drivers/net/wireless/realtek/rtw88/pci.h +++ b/drivers/net/wireless/realtek/rtw88/pci.h @@ -146,6 +146,7 @@ struct rtw_pci_tx_buffer_desc { struct rtw_pci_tx_data { dma_addr_t dma; + u8 sn; }; struct rtw_pci_ring { diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c index 49feb02..21516b7 100644 --- a/drivers/net/wireless/realtek/rtw88/tx.c +++ b/drivers/net/wireless/realtek/rtw88/tx.c @@ -4,6 +4,7 @@ #include "main.h" #include "tx.h" +#include "fw.h" #include "ps.h" static @@ -55,6 +56,8 @@ void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb) SET_TX_DESC_AGG_EN(txdesc, pkt_info->ampdu_en); SET_TX_DESC_LS(txdesc, pkt_info->ls); SET_TX_DESC_DATA_SHORT(txdesc, pkt_info->short_gi); + SET_TX_DESC_SPE_RPT(txdesc, pkt_info->report); + SET_TX_DESC_SW_DEFINE(txdesc, pkt_info->sn); } EXPORT_SYMBOL(rtw_tx_fill_tx_desc); @@ -128,6 +131,96 @@ static u8 get_highest_vht_tx_rate(struct rtw_dev *rtwdev, return rate; } +static void rtw_tx_report_enable(struct rtw_dev *rtwdev, + struct rtw_tx_pkt_info *pkt_info) +{ + struct rtw_tx_report *tx_report = &rtwdev->tx_report; + + /* [11:8], reserved, fills with zero + * [7:2], tx report sequence number + * [1:0], firmware use, fills with zero + */ + pkt_info->sn = (atomic_inc_return(&tx_report->sn) << 2) & 0xfc; + pkt_info->report = true; +} + +void rtw_tx_report_purge_timer(struct timer_list *t) +{ + struct rtw_dev *rtwdev = from_timer(rtwdev, t, tx_report.purge_timer); + struct rtw_tx_report *tx_report = &rtwdev->tx_report; + unsigned long flags; + + if (skb_queue_len(&tx_report->queue) == 0) + return; + + WARN(1, "purge skb(s) not reported by firmware\n"); + + spin_lock_irqsave(&tx_report->q_lock, flags); + skb_queue_purge(&tx_report->queue); + spin_unlock_irqrestore(&tx_report->q_lock, flags); +} + +void rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn) +{ + struct rtw_tx_report *tx_report = &rtwdev->tx_report; + unsigned long flags; + u8 *drv_data; + + /* pass sn to tx report handler through driver data */ + drv_data = (u8 *)IEEE80211_SKB_CB(skb)->status.status_driver_data; + *drv_data = sn; + + spin_lock_irqsave(&tx_report->q_lock, flags); + __skb_queue_tail(&tx_report->queue, skb); + spin_unlock_irqrestore(&tx_report->q_lock, flags); + + mod_timer(&tx_report->purge_timer, jiffies + RTW_TX_PROBE_TIMEOUT); +} +EXPORT_SYMBOL(rtw_tx_report_enqueue); + +static void rtw_tx_report_tx_status(struct rtw_dev *rtwdev, + struct sk_buff *skb, bool acked) +{ + struct ieee80211_tx_info *info; + + info = IEEE80211_SKB_CB(skb); + ieee80211_tx_info_clear_status(info); + if (acked) + info->flags |= IEEE80211_TX_STAT_ACK; + else + info->flags &= ~IEEE80211_TX_STAT_ACK; + + ieee80211_tx_status_irqsafe(rtwdev->hw, skb); +} + +void rtw_tx_report_handle(struct rtw_dev *rtwdev, struct sk_buff *skb) +{ + struct rtw_tx_report *tx_report = &rtwdev->tx_report; + struct rtw_c2h_cmd *c2h; + struct sk_buff *cur, *tmp; + unsigned long flags; + u32 pkt_offset; + u8 sn, st; + u8 *n; + + pkt_offset = *((u32 *)skb->cb); + c2h = (struct rtw_c2h_cmd *)(skb->data + pkt_offset); + + sn = GET_CCX_REPORT_SEQNUM(c2h->payload); + st = GET_CCX_REPORT_STATUS(c2h->payload); + + spin_lock_irqsave(&tx_report->q_lock, flags); + skb_queue_walk_safe(&tx_report->queue, cur, tmp) { + n = (u8 *)IEEE80211_SKB_CB(cur)->status.status_driver_data; + if (*n == sn) { + __skb_unlink(cur, &tx_report->queue); + rtw_tx_report_tx_status(rtwdev, cur, st == 0); + break; + } + } + spin_unlock_irqrestore(&tx_report->q_lock, flags); +} + static void rtw_tx_mgmt_pkt_info_update(struct rtw_dev *rtwdev, struct rtw_tx_pkt_info *pkt_info, struct ieee80211_tx_control *control, @@ -241,6 +334,9 @@ void rtw_tx_pkt_info_update(struct rtw_dev *rtwdev, bmc = is_broadcast_ether_addr(hdr->addr1) || is_multicast_ether_addr(hdr->addr1); + if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) + rtw_tx_report_enable(rtwdev, pkt_info); + pkt_info->bmc = bmc; pkt_info->sec_type = sec_type; pkt_info->tx_pkt_size = skb->len; diff --git a/drivers/net/wireless/realtek/rtw88/tx.h b/drivers/net/wireless/realtek/rtw88/tx.h index 010a055..6782632 100644 --- a/drivers/net/wireless/realtek/rtw88/tx.h +++ b/drivers/net/wireless/realtek/rtw88/tx.h @@ -7,6 +7,8 @@ #define RTK_TX_MAX_AGG_NUM_MASK 0x1f +#define RTW_TX_PROBE_TIMEOUT msecs_to_jiffies(500) + #define SET_TX_DESC_TXPKTSIZE(txdesc, value) \ le32p_replace_bits((__le32 *)(txdesc) + 0x00, value, GENMASK(15, 0)) #define SET_TX_DESC_OFFSET(txdesc, value) \ @@ -45,6 +47,10 @@ le32p_replace_bits((__le32 *)(txdesc) + 0x00, value, BIT(26)) #define SET_TX_DESC_DATA_SHORT(txdesc, value) \ le32p_replace_bits((__le32 *)(txdesc) + 0x05, value, BIT(4)) +#define SET_TX_DESC_SPE_RPT(tx_desc, value) \ + le32p_replace_bits((__le32 *)(txdesc) + 0x02, value, BIT(19)) +#define SET_TX_DESC_SW_DEFINE(tx_desc, value) \ + le32p_replace_bits((__le32 *)(txdesc) + 0x06, value, GENMASK(11, 0)) enum rtw_tx_desc_queue_select { TX_DESC_QSEL_TID0 = 0, @@ -74,6 +80,8 @@ void rtw_tx_pkt_info_update(struct rtw_dev *rtwdev, struct ieee80211_tx_control *control, struct sk_buff *skb); void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb); +void rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn); +void rtw_tx_report_handle(struct rtw_dev *rtwdev, struct sk_buff *skb); void rtw_rsvd_page_pkt_info_update(struct rtw_dev *rtwdev, struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb); From patchwork Thu Feb 14 08:58:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812085 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D2BD7184E for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C319B2D46D for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B73A82D48E; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2C16729C78 for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729545AbfBNI7c (ORCPT ); Thu, 14 Feb 2019 03:59:32 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39561 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728428AbfBNI7c (ORCPT ); Thu, 14 Feb 2019 03:59:32 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xDfn005826, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xDfn005826 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:13 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:12 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 02/24] rtw88: add get_c2h_from_skb for extracting c2h commands Date: Thu, 14 Feb 2019 16:58:41 +0800 Message-ID: <1550134743-17443-3-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang pkt_offset is only used when getting the c2h from skb->data, use get_c2h_from_skb to cleanup the code Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/fw.c | 4 +--- drivers/net/wireless/realtek/rtw88/fw.h | 8 ++++++++ drivers/net/wireless/realtek/rtw88/tx.c | 4 +--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c index 68c422b..12c4de8 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.c +++ b/drivers/net/wireless/realtek/rtw88/fw.c @@ -11,11 +11,9 @@ void rtw_fw_c2h_cmd_handle_ext(struct rtw_dev *rtwdev, struct sk_buff *skb) { struct rtw_c2h_cmd *c2h; - u32 pkt_offset; u8 sub_cmd_id; - pkt_offset = *((u32 *)skb->cb); - c2h = (struct rtw_c2h_cmd *)(skb->data + pkt_offset); + c2h = get_c2h_from_skb(skb); sub_cmd_id = c2h->payload[0]; switch (sub_cmd_id) { diff --git a/drivers/net/wireless/realtek/rtw88/fw.h b/drivers/net/wireless/realtek/rtw88/fw.h index 89950c7..86d9c86 100644 --- a/drivers/net/wireless/realtek/rtw88/fw.h +++ b/drivers/net/wireless/realtek/rtw88/fw.h @@ -192,6 +192,14 @@ static inline void rtw_h2c_pkt_set_header(u8 *h2c_pkt, u8 sub_id) #define SET_RA_INFO_RA_MASK3(h2c_pkt, value) \ le32p_replace_bits((__le32 *)(h2c_pkt) + 0x01, value, GENMASK(31, 24)) +static inline struct rtw_c2h_cmd *get_c2h_from_skb(struct sk_buff *skb) +{ + u32 pkt_offset; + + pkt_offset = *((u32 *)skb->cb); + return (struct rtw_c2h_cmd *)(skb->data + pkt_offset); +} + void rtw_fw_c2h_cmd_handle(struct rtw_dev *rtwdev, struct sk_buff *skb); void rtw_fw_send_general_info(struct rtw_dev *rtwdev); void rtw_fw_send_phydm_info(struct rtw_dev *rtwdev); diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c index 21516b7..e5267d5 100644 --- a/drivers/net/wireless/realtek/rtw88/tx.c +++ b/drivers/net/wireless/realtek/rtw88/tx.c @@ -199,12 +199,10 @@ void rtw_tx_report_handle(struct rtw_dev *rtwdev, struct sk_buff *skb) struct rtw_c2h_cmd *c2h; struct sk_buff *cur, *tmp; unsigned long flags; - u32 pkt_offset; u8 sn, st; u8 *n; - pkt_offset = *((u32 *)skb->cb); - c2h = (struct rtw_c2h_cmd *)(skb->data + pkt_offset); + c2h = get_c2h_from_skb(skb); sn = GET_CCX_REPORT_SEQNUM(c2h->payload); st = GET_CCX_REPORT_STATUS(c2h->payload); From patchwork Thu Feb 14 08:58:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812081 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CA58B188E for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BA11A29C78 for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ACDD12D47E; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4CB5F29CA7 for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730699AbfBNJAA (ORCPT ); Thu, 14 Feb 2019 04:00:00 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39563 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728448AbfBNI7c (ORCPT ); Thu, 14 Feb 2019 03:59:32 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xEsa005830, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xEsa005830 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:14 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:13 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 03/24] rtw88: can not support vif beacon filter actually Date: Thu, 14 Feb 2019 16:58:42 +0800 Message-ID: <1550134743-17443-4-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang Hardwares suuported by rtw88 are not able to support vif beacon filter. Reporting this confuses mac80211's connection monitor mechanism. Leave the beacon check for mac80211, and it will decide to trigger keep-alive when beacons missed. Otherwise the connection monitor can only rely on the data packets, and the corresponding timer is set to 30 seconds, which is too long. If we let mac80211 count the beacon, the connection can be detected in seven TUs. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/mac80211.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/mac80211.c b/drivers/net/wireless/realtek/rtw88/mac80211.c index 39529af..66b2b02 100644 --- a/drivers/net/wireless/realtek/rtw88/mac80211.c +++ b/drivers/net/wireless/realtek/rtw88/mac80211.c @@ -121,7 +121,6 @@ static int rtw_ops_add_interface(struct ieee80211_hw *hw, u32 config = 0; u8 port = 0; - vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER; rtwvif->port = port; rtwvif->vif = vif; rtwvif->stats.tx_unicast = 0; From patchwork Thu Feb 14 08:58:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812043 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DF28E13BF for ; Thu, 14 Feb 2019 08:59:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BFBA42D466 for ; Thu, 14 Feb 2019 08:59:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B0D722D46D; Thu, 14 Feb 2019 08:59:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3D6DE2D460 for ; Thu, 14 Feb 2019 08:59:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730469AbfBNI7e (ORCPT ); Thu, 14 Feb 2019 03:59:34 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39566 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729096AbfBNI7d (ORCPT ); Thu, 14 Feb 2019 03:59:33 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xE4d005834, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xE4d005834 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:14 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:14 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 04/24] rtw88: fix incorrect bit definition for RF mode Date: Thu, 14 Feb 2019 16:58:43 +0800 Message-ID: <1550134743-17443-5-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang 40M is indicated by Tx PTCL control BIT(7) and 80M by BIT(8) Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/reg.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h index a59961f..05424ec 100644 --- a/drivers/net/wireless/realtek/rtw88/reg.h +++ b/drivers/net/wireless/realtek/rtw88/reg.h @@ -286,8 +286,8 @@ #define REG_NAV_CTRL 0x0650 #define REG_WMAC_TRXPTCL_CTL 0x0668 #define BIT_RFMOD (BIT(7) | BIT(8)) -#define BIT_RFMOD_80M BIT(7) -#define BIT_RFMOD_40M BIT(8) +#define BIT_RFMOD_80M BIT(8) +#define BIT_RFMOD_40M BIT(7) #define REG_WMAC_TRXPTCL_CTL_H 0x066C #define REG_RXFLTMAP0 0x06A0 #define REG_RXFLTMAP1 0x06A2 From patchwork Thu Feb 14 08:58:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812087 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3DAF4922 for ; Thu, 14 Feb 2019 09:00:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2C32629D66 for ; Thu, 14 Feb 2019 09:00:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2054629CA7; Thu, 14 Feb 2019 09:00:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AAA352D460 for ; Thu, 14 Feb 2019 09:00:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732263AbfBNI7l (ORCPT ); Thu, 14 Feb 2019 03:59:41 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39572 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729841AbfBNI7d (ORCPT ); Thu, 14 Feb 2019 03:59:33 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xF7I005840, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xF7I005840 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:15 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:15 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 05/24] rtw88: add a delay after writing a rf register Date: Thu, 14 Feb 2019 16:58:44 +0800 Message-ID: <1550134743-17443-6-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Chien-Hsun Liao After writing a rf register, driver should wait for several microseconds. If we write a rf register and read it immediately without a delay, we could get a wrong value because the writing is not finished yet. Based on the simulation results, writing a rf register by pi write needs 13 microsenconds, writing rf register directly write needs 1 microsecond to complete. And modify direct write flow to make sure that there is no hardware pi write simultaneously. Signed-off-by: Chien-Hsun Liao Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/phy.c | 10 ++++++++++ drivers/net/wireless/realtek/rtw88/reg.h | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c index ae066e6..6cb07b5 100644 --- a/drivers/net/wireless/realtek/rtw88/phy.c +++ b/drivers/net/wireless/realtek/rtw88/phy.c @@ -5,6 +5,7 @@ #include #include "main.h" +#include "reg.h" #include "fw.h" #include "phy.h" #include "debug.h" @@ -573,6 +574,8 @@ bool rtw_phy_write_rf_reg_sipi(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, rtw_write32(rtwdev, sipi_addr[rf_path], data_and_addr); + udelay(13); + return true; } @@ -593,8 +596,15 @@ bool rtw_phy_write_rf_reg(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, direct_addr = base_addr[rf_path] + (addr << 2); mask &= RFREG_MASK; + rtw_write32_mask(rtwdev, REG_RSV_CTRL, BITS_RFC_DIRECT, DISABLE_PI); + rtw_write32_mask(rtwdev, REG_WLRF1, BITS_RFC_DIRECT, DISABLE_PI); rtw_write32_mask(rtwdev, direct_addr, mask, data); + udelay(1); + + rtw_write32_mask(rtwdev, REG_RSV_CTRL, BITS_RFC_DIRECT, ENABLE_PI); + rtw_write32_mask(rtwdev, REG_WLRF1, BITS_RFC_DIRECT, ENABLE_PI); + return true; } diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h index 05424ec..304c8df 100644 --- a/drivers/net/wireless/realtek/rtw88/reg.h +++ b/drivers/net/wireless/realtek/rtw88/reg.h @@ -14,6 +14,9 @@ #define BIT_CPU_CLK_EN BIT(14) #define REG_RSV_CTRL 0x001C +#define DISABLE_PI 0x3 +#define ENABLE_PI 0x2 +#define BITS_RFC_DIRECT (BIT(31) | BIT(30)) #define BIT_WLMCU_IOIF BIT(0) #define REG_RF_CTRL 0x001F #define BIT_RF_SDM_RSTB BIT(2) @@ -66,6 +69,7 @@ BIT_CHECK_SUM_OK) #define FW_READY_MASK 0xffff +#define REG_WLRF1 0x00EC #define REG_SYS_CFG1 0x00F0 #define BIT_RTL_ID BIT(23) #define BIT_RF_TYPE_ID BIT(27) From patchwork Thu Feb 14 08:58:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812055 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 16B651399 for ; Thu, 14 Feb 2019 08:59:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 04F1A2D1F6 for ; Thu, 14 Feb 2019 08:59:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ED41D2D466; Thu, 14 Feb 2019 08:59:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 769642D1F6 for ; Thu, 14 Feb 2019 08:59:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733025AbfBNI7m (ORCPT ); Thu, 14 Feb 2019 03:59:42 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39571 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726160AbfBNI7d (ORCPT ); Thu, 14 Feb 2019 03:59:33 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xGr5005844, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xGr5005844 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:16 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:15 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 06/24] rtw88: 8822c: correct crystal setting Date: Thu, 14 Feb 2019 16:58:45 +0800 Message-ID: <1550134743-17443-7-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang 8822c crystal setting register is no longer at 0x24 and 0x28. It is at REG_ANAPAR_XTAL_0 instead. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/reg.h | 1 + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h index 304c8df..56137cf5 100644 --- a/drivers/net/wireless/realtek/rtw88/reg.h +++ b/drivers/net/wireless/realtek/rtw88/reg.h @@ -301,6 +301,7 @@ #define REG_WMAC_OPTION_FUNCTION 0x07D0 #define REG_WMAC_OPTION_FUNCTION_1 0x07D4 +#define REG_ANAPAR_XTAL_0 0x1040 #define REG_CPU_DMEM_CON 0x1080 #define BIT_WL_PLATFORM_RST BIT(16) #define BIT_WL_SECURITY_CLK BIT(15) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 38e770c..71f2af0 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -95,9 +95,9 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev) rtw_phy_load_tables(rtwdev); - crystal_cap = rtwdev->efuse.crystal_cap & 0x3F; - rtw_write32_mask(rtwdev, 0x24, 0x7e000000, crystal_cap); - rtw_write32_mask(rtwdev, 0x28, 0x7e, crystal_cap); + crystal_cap = rtwdev->efuse.crystal_cap & 0x7f; + rtw_write32_mask(rtwdev, REG_ANAPAR_XTAL_0, 0xfffc00, + crystal_cap | (crystal_cap << 7)); /* post init after header files config */ rtw8822c_header_file_init(rtwdev, false); From patchwork Thu Feb 14 08:58:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812051 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A45C617E0 for ; Thu, 14 Feb 2019 08:59:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8CE872D1F6 for ; Thu, 14 Feb 2019 08:59:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7F1BE2D460; Thu, 14 Feb 2019 08:59:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D5BA42D460 for ; Thu, 14 Feb 2019 08:59:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730641AbfBNI7h (ORCPT ); Thu, 14 Feb 2019 03:59:37 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39587 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729096AbfBNI7g (ORCPT ); Thu, 14 Feb 2019 03:59:36 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xHue005851, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xHue005851 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:17 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:16 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 07/24] rtw88: 8822c: update efuse table as released Date: Thu, 14 Feb 2019 16:58:46 +0800 Message-ID: <1550134743-17443-8-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang Update efuse table layout as the document released. From the newest released document, 8822c has RFE type 1 and type 2. Without adding RFE 1 and 2 the user's efuse-programed chips will failed to pass the chip info check and cannot power on hardware. And 8822c has only 512 bytes for physical efuse. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 12 ++---- drivers/net/wireless/realtek/rtw88/rtw8822c.h | 53 ++++++++++++++------------- 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 71f2af0..5c06e32 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -16,12 +16,10 @@ static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, u8 rx_path, bool is_tx2_path); -static u8 temp_addr[ETH_ALEN] = {0x00, 0xe0, 0x4c, 0x88, 0x22, 0xce}; - static void rtw8822ce_efuse_parsing(struct rtw_efuse *efuse, struct rtw8822c_efuse *map) { - ether_addr_copy(efuse->addr, temp_addr); + ether_addr_copy(efuse->addr, map->e.mac_addr); } static int rtw8822c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map) @@ -34,10 +32,6 @@ static int rtw8822c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map) efuse->rfe_option = map->rfe_option; efuse->crystal_cap = map->xtal_k; - efuse->pa_type_2g = map->pa_type; - efuse->pa_type_5g = map->pa_type; - efuse->lna_type_2g = map->lna_type_2g[0]; - efuse->lna_type_5g = map->lna_type_5g[0]; efuse->channel_plan = map->channel_plan; efuse->country_code[0] = map->country_code[0]; efuse->country_code[1] = map->country_code[1]; @@ -1082,6 +1076,8 @@ static struct rtw_intf_phy_para_table phy_para_table_8822c = { static const struct rtw_rfe_def rtw8822c_rfe_defs[] = { [0] = RTW_DEF_RFE(8822c, 0, 0), + [1] = RTW_DEF_RFE(8822c, 0, 0), + [2] = RTW_DEF_RFE(8822c, 0, 0), }; static struct rtw_hw_reg rtw8822c_dig[] = { @@ -1137,7 +1133,7 @@ struct rtw_chip_info rtw8822c_hw_spec = { .tx_buf_desc_sz = 16, .rx_pkt_desc_sz = 24, .rx_buf_desc_sz = 8, - .phy_efuse_size = 1024, + .phy_efuse_size = 512, .log_efuse_size = 768, .ptct_efuse_size = 124, .txff_size = 262144, diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h index e8abce0..d4806fd 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h @@ -8,27 +8,16 @@ #include struct rtw8822cu_efuse { - u8 res4[4]; /* 0xd0 */ - u8 usb_optional_function; - u8 res5[0x1e]; - u8 res6[2]; - u8 serial[0x0b]; /* 0xf5 */ - u8 vid; /* 0x100 */ - u8 res7; - u8 pid; - u8 res8[4]; - u8 mac_addr[ETH_ALEN]; /* 0x107 */ - u8 res9[2]; - u8 vendor_name[0x07]; - u8 res10[2]; - u8 device_name[0x14]; - u8 res11[0xcf]; - u8 package_type; /* 0x1fb */ - u8 res12[0x4]; + u8 res0[0x30]; /* 0x120 */ + u8 vid[2]; /* 0x150 */ + u8 pid[2]; + u8 res1[3]; + u8 mac_addr[ETH_ALEN]; /* 0x157 */ + u8 res2[0x3d]; }; struct rtw8822ce_efuse { - u8 mac_addr[ETH_ALEN]; /* 0xd0 */ + u8 mac_addr[ETH_ALEN]; /* 0x120 */ u8 vender_id[2]; u8 device_id[2]; u8 sub_vender_id[2]; @@ -36,20 +25,20 @@ struct rtw8822ce_efuse { u8 pmc[2]; u8 exp_device_cap[2]; u8 msi_cap; - u8 ltr_cap; /* 0xe3 */ + u8 ltr_cap; /* 0x133 */ u8 exp_link_control[2]; u8 link_cap[4]; u8 link_control[2]; u8 serial_number[8]; - u8 res0:2; /* 0xf4 */ + u8 res0:2; /* 0x144 */ u8 ltr_en:1; u8 res1:2; u8 obff:2; u8 res2:3; u8 obff_cap:2; u8 res3:4; - u8 res4[3]; u8 class_code[3]; + u8 res4; u8 pci_pm_L1_2_supp:1; u8 pci_pm_L1_1_supp:1; u8 aspm_pm_L1_2_supp:1; @@ -72,11 +61,9 @@ struct rtw8822c_efuse { u8 channel_plan; /* 0xb8 */ u8 xtal_k; - u8 thermal_meter; + u8 res1; u8 iqk_lck; - u8 pa_type; /* 0xbc */ - u8 lna_type_2g[2]; /* 0xbd */ - u8 lna_type_5g[2]; + u8 res2[5]; /* 0xbc */ u8 rf_board_option; u8 rf_feature_option; u8 rf_bt_setting; @@ -88,7 +75,21 @@ struct rtw8822c_efuse { u8 rf_antenna_option; /* 0xc9 */ u8 rfe_option; u8 country_code[2]; - u8 res[3]; + u8 res3[3]; + u8 path_a_thermal; /* 0xd0 */ + u8 path_b_thermal; + u8 res4[2]; + u8 rx_gain_gap_2g_ofdm; + u8 res5; + u8 rx_gain_gap_2g_cck; + u8 res6; + u8 rx_gain_gap_5gl; + u8 res7; + u8 rx_gain_gap_5gm; + u8 res8; + u8 rx_gain_gap_5gh; + u8 res9; + u8 res10[0x42]; union { struct rtw8822cu_efuse u; struct rtw8822ce_efuse e; From patchwork Thu Feb 14 08:58:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812049 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C2E6613BF for ; Thu, 14 Feb 2019 08:59:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A06812D460 for ; Thu, 14 Feb 2019 08:59:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9419A2D48E; Thu, 14 Feb 2019 08:59:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4C0452D466 for ; Thu, 14 Feb 2019 08:59:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730699AbfBNI7h (ORCPT ); Thu, 14 Feb 2019 03:59:37 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39590 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730476AbfBNI7g (ORCPT ); Thu, 14 Feb 2019 03:59:36 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xIOm005855, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xIOm005855 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:18 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:17 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 08/24] rtw88: 8822c: update pwr_seq to v12 Date: Thu, 14 Feb 2019 16:58:47 +0800 Message-ID: <1550134743-17443-9-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang update sequence to v12 to enhance PCI LPS for PCI disable sequence Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 5c06e32..acacc30 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -900,6 +900,11 @@ static struct rtw_pwr_seq_cmd trans_cardemu_to_act_8822c[] = { RTW_PWR_INTF_ALL_MSK, RTW_PWR_ADDR_MAC, RTW_PWR_CMD_WRITE, BIT(4), BIT(4)}, + {0x0010, + RTW_PWR_CUT_ALL_MSK, + RTW_PWR_INTF_ALL_MSK, + RTW_PWR_ADDR_MAC, + RTW_PWR_CMD_WRITE, BIT(2), BIT(2)}, {0xFFFF, RTW_PWR_CUT_ALL_MSK, RTW_PWR_INTF_ALL_MSK, From patchwork Thu Feb 14 08:58:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812091 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 09263922 for ; Thu, 14 Feb 2019 09:00:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BEEC229C78 for ; Thu, 14 Feb 2019 09:00:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AE19E2D58F; Thu, 14 Feb 2019 09:00:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2CBC329C78 for ; Thu, 14 Feb 2019 09:00:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403932AbfBNJAS (ORCPT ); Thu, 14 Feb 2019 04:00:18 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39706 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404572AbfBNJAS (ORCPT ); Thu, 14 Feb 2019 04:00:18 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xJ0f005859, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xJ0f005859 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:19 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:18 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 09/24] rtw88: 8822c: update phy parameter to v27 Date: Thu, 14 Feb 2019 16:58:48 +0800 Message-ID: <1550134743-17443-10-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang PHY layer parameter table update to version 27. Moreover, 8822c has an extra rfk table, this table has significant impact on RF performance. Without these updates, most of the hardware will not be able to power on correctly, PHY layer could behave strangely. The basic functionalities such as tx/rx might be abnormal. Driver could even fail to connect AP. Note this should be applied with 8822c's channel setting updates, many parameter results are based on the tables. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/main.h | 1 + drivers/net/wireless/realtek/rtw88/phy.c | 11 + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 + .../net/wireless/realtek/rtw88/rtw8822c_table.c | 11047 ++++++++++++++++--- .../net/wireless/realtek/rtw88/rtw8822c_table.h | 1 + 5 files changed, 9339 insertions(+), 1722 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h index 808eaa6..85a719c 100644 --- a/drivers/net/wireless/realtek/rtw88/main.h +++ b/drivers/net/wireless/realtek/rtw88/main.h @@ -828,6 +828,7 @@ struct rtw_chip_info { const struct rtw_table *agc_tbl; const struct rtw_table *bb_tbl; const struct rtw_table *rf_tbl[RTW_RF_PATH_MAX]; + const struct rtw_table *rfk_init_tbl; const struct rtw_rfe_def *rfe_defs; u32 rfe_defs_size; diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c index 6cb07b5..4a9ae1f 100644 --- a/drivers/net/wireless/realtek/rtw88/phy.c +++ b/drivers/net/wireless/realtek/rtw88/phy.c @@ -786,6 +786,16 @@ void rtw_phy_cfg_rf(struct rtw_dev *rtwdev, const struct rtw_table *tbl, } } +static void rtw_load_rfk_table(struct rtw_dev *rtwdev) +{ + struct rtw_chip_info *chip = rtwdev->chip; + + if (!chip->rfk_init_tbl) + return; + + rtw_load_table(rtwdev, chip->rfk_init_tbl); +} + void rtw_phy_load_tables(struct rtw_dev *rtwdev) { struct rtw_chip_info *chip = rtwdev->chip; @@ -794,6 +804,7 @@ void rtw_phy_load_tables(struct rtw_dev *rtwdev) rtw_load_table(rtwdev, chip->mac_tbl); rtw_load_table(rtwdev, chip->bb_tbl); rtw_load_table(rtwdev, chip->agc_tbl); + rtw_load_rfk_table(rtwdev); for (rf_path = 0; rf_path < rtwdev->hal.rf_path_num; rf_path++) { const struct rtw_table *tbl; diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index acacc30..7dd1d15 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -1161,6 +1161,7 @@ struct rtw_chip_info rtw8822c_hw_spec = { .mac_tbl = &rtw8822c_mac_tbl, .agc_tbl = &rtw8822c_agc_tbl, .bb_tbl = &rtw8822c_bb_tbl, + .rfk_init_tbl = &rtw8822c_array_mp_cal_init_tbl, .rf_tbl = {&rtw8822c_rf_a_tbl, &rtw8822c_rf_b_tbl}, .rfe_defs = rtw8822c_rfe_defs, .rfe_defs_size = ARRAY_SIZE(rtw8822c_rfe_defs), diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c_table.c b/drivers/net/wireless/realtek/rtw88/rtw8822c_table.c index e95ad82..d6fefb3 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c_table.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c_table.c @@ -14,55 +14,55 @@ RTW_DECL_TABLE_PHY_COND(rtw8822c_mac, rtw_phy_cfg_mac); static const u32 rtw8822c_agc[] = { 0x1D90, 0x300001FF, 0x1D90, 0x300101FF, - 0x1D90, 0x300201FF, - 0x1D90, 0x300301FF, - 0x1D90, 0x300401FF, - 0x1D90, 0x300501FF, - 0x1D90, 0x300601FE, - 0x1D90, 0x300701FD, - 0x1D90, 0x300801FC, - 0x1D90, 0x300901FB, - 0x1D90, 0x300A01FA, - 0x1D90, 0x300B01F9, - 0x1D90, 0x300C01F8, - 0x1D90, 0x300D01F7, - 0x1D90, 0x300E01F6, - 0x1D90, 0x300F01F5, - 0x1D90, 0x301001F4, - 0x1D90, 0x301101F3, - 0x1D90, 0x301201F2, - 0x1D90, 0x301301F1, - 0x1D90, 0x301401F0, - 0x1D90, 0x301501EF, - 0x1D90, 0x301601AF, - 0x1D90, 0x301701AE, - 0x1D90, 0x301801AD, - 0x1D90, 0x301901AC, - 0x1D90, 0x301A01AB, - 0x1D90, 0x301B01AA, - 0x1D90, 0x301C01A9, - 0x1D90, 0x301D0188, - 0x1D90, 0x301E0187, - 0x1D90, 0x301F0186, - 0x1D90, 0x30200185, - 0x1D90, 0x30210168, - 0x1D90, 0x30220167, - 0x1D90, 0x30230166, - 0x1D90, 0x30240108, - 0x1D90, 0x30250107, - 0x1D90, 0x30260106, - 0x1D90, 0x30270144, - 0x1D90, 0x30280143, - 0x1D90, 0x30290142, - 0x1D90, 0x302A0141, - 0x1D90, 0x302B0140, - 0x1D90, 0x302C00C9, - 0x1D90, 0x302D00C8, - 0x1D90, 0x302E00C7, - 0x1D90, 0x302F00C6, - 0x1D90, 0x303000C5, - 0x1D90, 0x303100C4, - 0x1D90, 0x303200C3, + 0x1D90, 0x300201FE, + 0x1D90, 0x300301FD, + 0x1D90, 0x300401FC, + 0x1D90, 0x300501FB, + 0x1D90, 0x300601FA, + 0x1D90, 0x300701F9, + 0x1D90, 0x300801F8, + 0x1D90, 0x300901F7, + 0x1D90, 0x300A01F6, + 0x1D90, 0x300B01F5, + 0x1D90, 0x300C01F4, + 0x1D90, 0x300D01F3, + 0x1D90, 0x300E01F2, + 0x1D90, 0x300F01F1, + 0x1D90, 0x301001F0, + 0x1D90, 0x301101EF, + 0x1D90, 0x301201EE, + 0x1D90, 0x301301ED, + 0x1D90, 0x301401EC, + 0x1D90, 0x301501EB, + 0x1D90, 0x30160192, + 0x1D90, 0x30170191, + 0x1D90, 0x30180190, + 0x1D90, 0x3019018F, + 0x1D90, 0x301A018E, + 0x1D90, 0x301B018D, + 0x1D90, 0x301C018C, + 0x1D90, 0x301D018B, + 0x1D90, 0x301E018A, + 0x1D90, 0x301F0189, + 0x1D90, 0x30200188, + 0x1D90, 0x30210187, + 0x1D90, 0x30220186, + 0x1D90, 0x30230185, + 0x1D90, 0x3024014B, + 0x1D90, 0x3025014A, + 0x1D90, 0x30260149, + 0x1D90, 0x30270148, + 0x1D90, 0x30280147, + 0x1D90, 0x30290146, + 0x1D90, 0x302A0145, + 0x1D90, 0x302B0144, + 0x1D90, 0x302C0143, + 0x1D90, 0x302D0142, + 0x1D90, 0x302E00C8, + 0x1D90, 0x302F00C7, + 0x1D90, 0x303000C6, + 0x1D90, 0x303100C5, + 0x1D90, 0x303200C4, 0x1D90, 0x30330088, 0x1D90, 0x30340087, 0x1D90, 0x30350086, @@ -80,192 +80,192 @@ static const u32 rtw8822c_agc[] = { 0x1D90, 0x304100FF, 0x1D90, 0x304200FF, 0x1D90, 0x304300FF, - 0x1D90, 0x304400FF, - 0x1D90, 0x304500FE, - 0x1D90, 0x304600FD, - 0x1D90, 0x304700FC, - 0x1D90, 0x304800FB, - 0x1D90, 0x304900FA, - 0x1D90, 0x304A00F9, - 0x1D90, 0x304B00F8, - 0x1D90, 0x304C00F7, - 0x1D90, 0x304D00F6, - 0x1D90, 0x304E00F5, - 0x1D90, 0x304F00F4, - 0x1D90, 0x305000F3, - 0x1D90, 0x305100F2, - 0x1D90, 0x305200F1, - 0x1D90, 0x305300F0, - 0x1D90, 0x305400EF, - 0x1D90, 0x305500EE, - 0x1D90, 0x305600ED, - 0x1D90, 0x305700EC, - 0x1D90, 0x305800EB, - 0x1D90, 0x305900EA, - 0x1D90, 0x305A00E9, - 0x1D90, 0x305B00E8, - 0x1D90, 0x305C00E7, - 0x1D90, 0x305D00E6, - 0x1D90, 0x305E00E5, - 0x1D90, 0x305F00E4, - 0x1D90, 0x306000E3, + 0x1D90, 0x304400FE, + 0x1D90, 0x304500FD, + 0x1D90, 0x304600FC, + 0x1D90, 0x304700FB, + 0x1D90, 0x304800FA, + 0x1D90, 0x304900F9, + 0x1D90, 0x304A00F8, + 0x1D90, 0x304B00F7, + 0x1D90, 0x304C00F6, + 0x1D90, 0x304D00F5, + 0x1D90, 0x304E00F4, + 0x1D90, 0x304F00F3, + 0x1D90, 0x305000F2, + 0x1D90, 0x305100F1, + 0x1D90, 0x305200F0, + 0x1D90, 0x305300EF, + 0x1D90, 0x305400EE, + 0x1D90, 0x305500ED, + 0x1D90, 0x305600EC, + 0x1D90, 0x305700EB, + 0x1D90, 0x305800EA, + 0x1D90, 0x305900E9, + 0x1D90, 0x305A00E8, + 0x1D90, 0x305B00E7, + 0x1D90, 0x305C00E6, + 0x1D90, 0x305D00C7, + 0x1D90, 0x305E00C6, + 0x1D90, 0x305F00C5, + 0x1D90, 0x306000C4, 0x1D90, 0x306100C3, 0x1D90, 0x306200C2, - 0x1D90, 0x306300C1, - 0x1D90, 0x30640088, - 0x1D90, 0x30650087, + 0x1D90, 0x306300A4, + 0x1D90, 0x306400A3, + 0x1D90, 0x306500A2, 0x1D90, 0x30660086, 0x1D90, 0x30670085, 0x1D90, 0x30680084, 0x1D90, 0x30690083, 0x1D90, 0x306A0082, - 0x1D90, 0x306B0081, + 0x1D90, 0x306B0069, 0x1D90, 0x306C0068, 0x1D90, 0x306D0067, 0x1D90, 0x306E0066, 0x1D90, 0x306F0065, 0x1D90, 0x30700064, 0x1D90, 0x30710063, - 0x1D90, 0x30720045, - 0x1D90, 0x30730044, - 0x1D90, 0x30740043, - 0x1D90, 0x30750026, - 0x1D90, 0x30760025, - 0x1D90, 0x30770024, - 0x1D90, 0x30780023, - 0x1D90, 0x30790022, - 0x1D90, 0x307A0021, - 0x1D90, 0x307B0020, - 0x1D90, 0x307C0001, - 0x1D90, 0x307D0000, + 0x1D90, 0x30720044, + 0x1D90, 0x30730043, + 0x1D90, 0x30740042, + 0x1D90, 0x30750025, + 0x1D90, 0x30760024, + 0x1D90, 0x30770023, + 0x1D90, 0x30780022, + 0x1D90, 0x30790021, + 0x1D90, 0x307A0020, + 0x1D90, 0x307B0003, + 0x1D90, 0x307C0002, + 0x1D90, 0x307D0001, 0x1D90, 0x307E0000, 0x1D90, 0x307F0000, 0x1D90, 0x308000FF, 0x1D90, 0x308100FF, 0x1D90, 0x308200FF, 0x1D90, 0x308300FF, - 0x1D90, 0x308400FF, - 0x1D90, 0x308500FE, - 0x1D90, 0x308600FD, - 0x1D90, 0x308700FC, - 0x1D90, 0x308800FB, - 0x1D90, 0x308900FA, - 0x1D90, 0x308A00F9, - 0x1D90, 0x308B00F8, - 0x1D90, 0x308C00F7, - 0x1D90, 0x308D00F6, - 0x1D90, 0x308E00F5, - 0x1D90, 0x308F00F4, - 0x1D90, 0x309000F3, - 0x1D90, 0x309100F2, - 0x1D90, 0x309200F1, - 0x1D90, 0x309300F0, - 0x1D90, 0x309400EF, - 0x1D90, 0x309500EE, - 0x1D90, 0x309600ED, - 0x1D90, 0x309700EC, - 0x1D90, 0x309800EB, - 0x1D90, 0x309900EA, - 0x1D90, 0x309A00E9, - 0x1D90, 0x309B00E8, - 0x1D90, 0x309C00E7, - 0x1D90, 0x309D00E6, - 0x1D90, 0x309E00E5, - 0x1D90, 0x309F00E4, - 0x1D90, 0x30A000E3, + 0x1D90, 0x308400FE, + 0x1D90, 0x308500FD, + 0x1D90, 0x308600FC, + 0x1D90, 0x308700FB, + 0x1D90, 0x308800FA, + 0x1D90, 0x308900F9, + 0x1D90, 0x308A00F8, + 0x1D90, 0x308B00F7, + 0x1D90, 0x308C00F6, + 0x1D90, 0x308D00F5, + 0x1D90, 0x308E00F4, + 0x1D90, 0x308F00F3, + 0x1D90, 0x309000F2, + 0x1D90, 0x309100F1, + 0x1D90, 0x309200F0, + 0x1D90, 0x309300EF, + 0x1D90, 0x309400EE, + 0x1D90, 0x309500ED, + 0x1D90, 0x309600EC, + 0x1D90, 0x309700EB, + 0x1D90, 0x309800EA, + 0x1D90, 0x309900E9, + 0x1D90, 0x309A00E8, + 0x1D90, 0x309B00E7, + 0x1D90, 0x309C00E6, + 0x1D90, 0x309D00C7, + 0x1D90, 0x309E00C6, + 0x1D90, 0x309F00C5, + 0x1D90, 0x30A000C4, 0x1D90, 0x30A100C3, 0x1D90, 0x30A200C2, - 0x1D90, 0x30A300C1, - 0x1D90, 0x30A40088, - 0x1D90, 0x30A50087, + 0x1D90, 0x30A300A4, + 0x1D90, 0x30A400A3, + 0x1D90, 0x30A500A2, 0x1D90, 0x30A60086, 0x1D90, 0x30A70085, 0x1D90, 0x30A80084, 0x1D90, 0x30A90083, 0x1D90, 0x30AA0082, - 0x1D90, 0x30AB0081, + 0x1D90, 0x30AB0069, 0x1D90, 0x30AC0068, 0x1D90, 0x30AD0067, 0x1D90, 0x30AE0066, 0x1D90, 0x30AF0065, 0x1D90, 0x30B00064, 0x1D90, 0x30B10063, - 0x1D90, 0x30B20045, - 0x1D90, 0x30B30044, - 0x1D90, 0x30B40043, - 0x1D90, 0x30B50026, - 0x1D90, 0x30B60025, - 0x1D90, 0x30B70024, - 0x1D90, 0x30B80023, - 0x1D90, 0x30B90022, - 0x1D90, 0x30BA0021, - 0x1D90, 0x30BB0020, - 0x1D90, 0x30BC0001, - 0x1D90, 0x30BD0000, + 0x1D90, 0x30B20044, + 0x1D90, 0x30B30043, + 0x1D90, 0x30B40042, + 0x1D90, 0x30B50025, + 0x1D90, 0x30B60024, + 0x1D90, 0x30B70023, + 0x1D90, 0x30B80022, + 0x1D90, 0x30B90021, + 0x1D90, 0x30BA0020, + 0x1D90, 0x30BB0003, + 0x1D90, 0x30BC0002, + 0x1D90, 0x30BD0001, 0x1D90, 0x30BE0000, 0x1D90, 0x30BF0000, 0x1D90, 0x30C000FF, 0x1D90, 0x30C100FF, 0x1D90, 0x30C200FF, 0x1D90, 0x30C300FF, - 0x1D90, 0x30C400FF, - 0x1D90, 0x30C500FE, - 0x1D90, 0x30C600FD, - 0x1D90, 0x30C700FC, - 0x1D90, 0x30C800FB, - 0x1D90, 0x30C900FA, - 0x1D90, 0x30CA00F9, - 0x1D90, 0x30CB00F8, - 0x1D90, 0x30CC00F7, - 0x1D90, 0x30CD00F6, - 0x1D90, 0x30CE00F5, - 0x1D90, 0x30CF00F4, - 0x1D90, 0x30D000F3, - 0x1D90, 0x30D100F2, - 0x1D90, 0x30D200F1, - 0x1D90, 0x30D300F0, - 0x1D90, 0x30D400EF, - 0x1D90, 0x30D500EE, - 0x1D90, 0x30D600ED, - 0x1D90, 0x30D700EC, - 0x1D90, 0x30D800EB, - 0x1D90, 0x30D900EA, - 0x1D90, 0x30DA00E9, - 0x1D90, 0x30DB00E8, - 0x1D90, 0x30DC00E7, - 0x1D90, 0x30DD00E6, - 0x1D90, 0x30DE00E5, - 0x1D90, 0x30DF00E4, - 0x1D90, 0x30E000E3, + 0x1D90, 0x30C400FE, + 0x1D90, 0x30C500FD, + 0x1D90, 0x30C600FC, + 0x1D90, 0x30C700FB, + 0x1D90, 0x30C800FA, + 0x1D90, 0x30C900F9, + 0x1D90, 0x30CA00F8, + 0x1D90, 0x30CB00F7, + 0x1D90, 0x30CC00F6, + 0x1D90, 0x30CD00F5, + 0x1D90, 0x30CE00F4, + 0x1D90, 0x30CF00F3, + 0x1D90, 0x30D000F2, + 0x1D90, 0x30D100F1, + 0x1D90, 0x30D200F0, + 0x1D90, 0x30D300EF, + 0x1D90, 0x30D400EE, + 0x1D90, 0x30D500ED, + 0x1D90, 0x30D600EC, + 0x1D90, 0x30D700EB, + 0x1D90, 0x30D800EA, + 0x1D90, 0x30D900E9, + 0x1D90, 0x30DA00E8, + 0x1D90, 0x30DB00E7, + 0x1D90, 0x30DC00E6, + 0x1D90, 0x30DD00C7, + 0x1D90, 0x30DE00C6, + 0x1D90, 0x30DF00C5, + 0x1D90, 0x30E000C4, 0x1D90, 0x30E100C3, 0x1D90, 0x30E200C2, - 0x1D90, 0x30E300C1, - 0x1D90, 0x30E40088, - 0x1D90, 0x30E50087, + 0x1D90, 0x30E300A4, + 0x1D90, 0x30E400A3, + 0x1D90, 0x30E500A2, 0x1D90, 0x30E60086, 0x1D90, 0x30E70085, 0x1D90, 0x30E80084, 0x1D90, 0x30E90083, 0x1D90, 0x30EA0082, - 0x1D90, 0x30EB0081, + 0x1D90, 0x30EB0069, 0x1D90, 0x30EC0068, 0x1D90, 0x30ED0067, 0x1D90, 0x30EE0066, 0x1D90, 0x30EF0065, 0x1D90, 0x30F00064, 0x1D90, 0x30F10063, - 0x1D90, 0x30F20045, - 0x1D90, 0x30F30044, - 0x1D90, 0x30F40043, - 0x1D90, 0x30F50026, - 0x1D90, 0x30F60025, - 0x1D90, 0x30F70024, - 0x1D90, 0x30F80023, - 0x1D90, 0x30F90022, - 0x1D90, 0x30FA0021, - 0x1D90, 0x30FB0020, - 0x1D90, 0x30FC0001, - 0x1D90, 0x30FD0000, + 0x1D90, 0x30F20044, + 0x1D90, 0x30F30043, + 0x1D90, 0x30F40042, + 0x1D90, 0x30F50025, + 0x1D90, 0x30F60024, + 0x1D90, 0x30F70023, + 0x1D90, 0x30F80022, + 0x1D90, 0x30F90021, + 0x1D90, 0x30FA0020, + 0x1D90, 0x30FB0003, + 0x1D90, 0x30FC0002, + 0x1D90, 0x30FD0001, 0x1D90, 0x30FE0000, 0x1D90, 0x30FF0000, 0x1D90, 0x310001FF, @@ -277,50 +277,50 @@ static const u32 rtw8822c_agc[] = { 0x1D90, 0x310601FF, 0x1D90, 0x310701FF, 0x1D90, 0x310801FF, - 0x1D90, 0x310901FF, - 0x1D90, 0x310A01FF, - 0x1D90, 0x310B01FF, - 0x1D90, 0x310C01FF, - 0x1D90, 0x310D01FE, - 0x1D90, 0x310E01FD, - 0x1D90, 0x310F01FC, - 0x1D90, 0x311001FB, - 0x1D90, 0x311101FA, - 0x1D90, 0x311201F9, - 0x1D90, 0x311301F8, - 0x1D90, 0x311401F7, - 0x1D90, 0x311501F6, - 0x1D90, 0x311601F5, - 0x1D90, 0x311701F4, - 0x1D90, 0x311801F3, - 0x1D90, 0x311901F2, - 0x1D90, 0x311A01F1, - 0x1D90, 0x311B01F0, - 0x1D90, 0x311C01EF, - 0x1D90, 0x311D01AF, - 0x1D90, 0x311E01AE, - 0x1D90, 0x311F01AD, - 0x1D90, 0x312001AC, - 0x1D90, 0x312101AB, - 0x1D90, 0x312201AA, - 0x1D90, 0x312301A9, - 0x1D90, 0x31240188, - 0x1D90, 0x31250187, - 0x1D90, 0x31260186, - 0x1D90, 0x31270185, - 0x1D90, 0x31280168, - 0x1D90, 0x31290167, - 0x1D90, 0x312A0166, - 0x1D90, 0x312B0108, - 0x1D90, 0x312C0107, - 0x1D90, 0x312D0106, - 0x1D90, 0x312E0144, - 0x1D90, 0x312F0143, - 0x1D90, 0x31300142, - 0x1D90, 0x31310141, - 0x1D90, 0x31320140, - 0x1D90, 0x313300C9, - 0x1D90, 0x313400C8, + 0x1D90, 0x310901FE, + 0x1D90, 0x310A01FD, + 0x1D90, 0x310B01FC, + 0x1D90, 0x310C01FB, + 0x1D90, 0x310D01FA, + 0x1D90, 0x310E01F9, + 0x1D90, 0x310F01F8, + 0x1D90, 0x311001F7, + 0x1D90, 0x311101F6, + 0x1D90, 0x311201F5, + 0x1D90, 0x311301F4, + 0x1D90, 0x311401F3, + 0x1D90, 0x311501F2, + 0x1D90, 0x311601F1, + 0x1D90, 0x311701F0, + 0x1D90, 0x311801EF, + 0x1D90, 0x311901EE, + 0x1D90, 0x311A01ED, + 0x1D90, 0x311B01EC, + 0x1D90, 0x311C01EB, + 0x1D90, 0x311D0192, + 0x1D90, 0x311E0191, + 0x1D90, 0x311F0190, + 0x1D90, 0x3120018F, + 0x1D90, 0x3121018E, + 0x1D90, 0x3122018D, + 0x1D90, 0x3123018C, + 0x1D90, 0x3124018B, + 0x1D90, 0x3125018A, + 0x1D90, 0x31260189, + 0x1D90, 0x31270188, + 0x1D90, 0x31280187, + 0x1D90, 0x31290186, + 0x1D90, 0x312A0185, + 0x1D90, 0x312B0149, + 0x1D90, 0x312C0148, + 0x1D90, 0x312D0147, + 0x1D90, 0x312E0146, + 0x1D90, 0x312F0145, + 0x1D90, 0x31300144, + 0x1D90, 0x31310143, + 0x1D90, 0x31320142, + 0x1D90, 0x31330141, + 0x1D90, 0x31340140, 0x1D90, 0x313500C7, 0x1D90, 0x313600C6, 0x1D90, 0x313700C5, @@ -332,6 +332,134 @@ static const u32 rtw8822c_agc[] = { 0x1D90, 0x313D0045, 0x1D90, 0x313E0044, 0x1D90, 0x313F0043, + 0x1D90, 0x314001FF, + 0x1D90, 0x314101FF, + 0x1D90, 0x314201FF, + 0x1D90, 0x314301FF, + 0x1D90, 0x314401FF, + 0x1D90, 0x314501FF, + 0x1D90, 0x314601FF, + 0x1D90, 0x314701FE, + 0x1D90, 0x314801FD, + 0x1D90, 0x314901FC, + 0x1D90, 0x314A01FB, + 0x1D90, 0x314B01FA, + 0x1D90, 0x314C01F9, + 0x1D90, 0x314D01F8, + 0x1D90, 0x314E01F7, + 0x1D90, 0x314F01F6, + 0x1D90, 0x315001F5, + 0x1D90, 0x315101F4, + 0x1D90, 0x315201F3, + 0x1D90, 0x315301F2, + 0x1D90, 0x315401F1, + 0x1D90, 0x315501F0, + 0x1D90, 0x315601EF, + 0x1D90, 0x315701EE, + 0x1D90, 0x315801ED, + 0x1D90, 0x315901EC, + 0x1D90, 0x315A01EB, + 0x1D90, 0x315B01EA, + 0x1D90, 0x315C01E9, + 0x1D90, 0x315D018F, + 0x1D90, 0x315E018E, + 0x1D90, 0x315F018D, + 0x1D90, 0x3160018C, + 0x1D90, 0x3161018B, + 0x1D90, 0x3162018A, + 0x1D90, 0x31630189, + 0x1D90, 0x31640188, + 0x1D90, 0x31650187, + 0x1D90, 0x31660186, + 0x1D90, 0x31670185, + 0x1D90, 0x31680184, + 0x1D90, 0x31690183, + 0x1D90, 0x316A0182, + 0x1D90, 0x316B0149, + 0x1D90, 0x316C0148, + 0x1D90, 0x316D0147, + 0x1D90, 0x316E0146, + 0x1D90, 0x316F0145, + 0x1D90, 0x31700144, + 0x1D90, 0x31710143, + 0x1D90, 0x31720142, + 0x1D90, 0x31730141, + 0x1D90, 0x31740140, + 0x1D90, 0x317500C7, + 0x1D90, 0x317600C6, + 0x1D90, 0x317700C5, + 0x1D90, 0x317800C4, + 0x1D90, 0x317900C3, + 0x1D90, 0x317A0088, + 0x1D90, 0x317B0087, + 0x1D90, 0x317C0086, + 0x1D90, 0x317D0045, + 0x1D90, 0x317E0044, + 0x1D90, 0x317F0043, + 0x1D90, 0x318001FE, + 0x1D90, 0x318101FD, + 0x1D90, 0x318201FC, + 0x1D90, 0x318301FB, + 0x1D90, 0x318401FA, + 0x1D90, 0x318501F9, + 0x1D90, 0x318601F8, + 0x1D90, 0x318701F7, + 0x1D90, 0x318801F6, + 0x1D90, 0x318901F5, + 0x1D90, 0x318A01F4, + 0x1D90, 0x318B01F3, + 0x1D90, 0x318C01F2, + 0x1D90, 0x318D01F1, + 0x1D90, 0x318E01F0, + 0x1D90, 0x318F01EF, + 0x1D90, 0x319001EE, + 0x1D90, 0x319101ED, + 0x1D90, 0x319201EC, + 0x1D90, 0x319301EB, + 0x1D90, 0x319401EA, + 0x1D90, 0x319501E9, + 0x1D90, 0x3196018F, + 0x1D90, 0x3197018E, + 0x1D90, 0x3198018D, + 0x1D90, 0x3199018C, + 0x1D90, 0x319A018B, + 0x1D90, 0x319B018A, + 0x1D90, 0x319C0189, + 0x1D90, 0x319D0188, + 0x1D90, 0x319E0187, + 0x1D90, 0x319F0186, + 0x1D90, 0x31A00185, + 0x1D90, 0x31A10184, + 0x1D90, 0x31A20183, + 0x1D90, 0x31A30182, + 0x1D90, 0x31A40149, + 0x1D90, 0x31A50148, + 0x1D90, 0x31A60147, + 0x1D90, 0x31A70146, + 0x1D90, 0x31A80145, + 0x1D90, 0x31A90144, + 0x1D90, 0x31AA0143, + 0x1D90, 0x31AB0142, + 0x1D90, 0x31AC0141, + 0x1D90, 0x31AD0140, + 0x1D90, 0x31AE00C7, + 0x1D90, 0x31AF00C6, + 0x1D90, 0x31B000C5, + 0x1D90, 0x31B100C4, + 0x1D90, 0x31B200C3, + 0x1D90, 0x31B30088, + 0x1D90, 0x31B40087, + 0x1D90, 0x31B50086, + 0x1D90, 0x31B60045, + 0x1D90, 0x31B70044, + 0x1D90, 0x31B80043, + 0x1D90, 0x31B90023, + 0x1D90, 0x31BA0022, + 0x1D90, 0x31BB0021, + 0x1D90, 0x31BC0020, + 0x1D90, 0x31BD0002, + 0x1D90, 0x31BE0001, + 0x1D90, 0x31BF0000, 0x1D70, 0x22222222, 0x1D70, 0x20202020, }; @@ -350,11 +478,11 @@ static const u32 rtw8822c_bb[] = { 0x814, 0x00904080, 0x818, 0xC30056F1, 0x81C, 0x00050000, - 0x820, 0x11111111, + 0x820, 0x11111133, 0x824, 0xC3C3CCC4, 0x828, 0x30FB186C, - 0x82C, 0x11454517, - 0x830, 0x17511454, + 0x82C, 0x185D6556, + 0x830, 0x1751145B, 0x834, 0x776995D7, 0x838, 0x74777A7D, 0x83C, 0xF9AA9982, @@ -369,13 +497,13 @@ static const u32 rtw8822c_bb[] = { 0x860, 0x6F7A6C77, 0x864, 0x6C776C77, 0x868, 0x727D6F7A, - 0x86C, 0x69D7B197, + 0x86C, 0x69D7B196, 0x870, 0x1A6D769B, 0x874, 0x55823917, 0x878, 0x00C025BD, 0x87C, 0x4140557D, - 0x880, 0x7A1D9D47, - 0x884, 0x1D67534F, + 0x880, 0x9A1D9D47, + 0x884, 0x1DE7134F, 0x888, 0x2857A857, 0x88C, 0x520E8A24, 0x890, 0x8F628C44, @@ -392,7 +520,7 @@ static const u32 rtw8822c_bb[] = { 0x8BC, 0x07D0309F, 0x8C0, 0x70404023, 0x8C4, 0x00440001, - 0x8C8, 0x7A7A7D7D, + 0x8C8, 0x7A7A2E26, 0x8CC, 0x25297777, 0x8D0, 0x6CEB6DCE, 0x8D4, 0x0005A632, @@ -450,7 +578,7 @@ static const u32 rtw8822c_bb[] = { 0x9A8, 0x13121110, 0x9AC, 0x17161514, 0x9B0, 0x00002200, - 0x9B4, 0xDB6DB600, + 0x9B4, 0xDB6FFF00, 0x9B8, 0x00400064, 0x9BC, 0x00000000, 0x9C0, 0x01010101, @@ -487,14 +615,14 @@ static const u32 rtw8822c_bb[] = { 0xA40, 0xB35DC5BD, 0xA44, 0x3033BEBD, 0xA48, 0x2A521254, - 0xA4C, 0xA2533345, - 0xA50, 0x605BE083, + 0xA4C, 0xA2733345, + 0xA50, 0x617BE003, 0xA54, 0x50000968, 0xA58, 0x00020000, 0xA5C, 0x01000000, 0xA60, 0x02000000, 0xA64, 0x03000000, - 0xA68, 0x00030000, + 0xA68, 0x00020000, 0xA6C, 0x00000000, 0xA70, 0x00000000, 0xA74, 0x00000000, @@ -594,7 +722,7 @@ static const u32 rtw8822c_bb[] = { 0xBF0, 0x00000000, 0xBF4, 0x00000000, 0xBF8, 0x00000000, - 0xC00, 0x1D8BA0D6, + 0xC00, 0x1C8BA0D6, 0xC04, 0x00000001, 0xC08, 0x00000000, 0xC0C, 0x02F1D8B7, @@ -641,7 +769,7 @@ static const u32 rtw8822c_bb[] = { 0xCB0, 0x3A133A3A, 0xCB4, 0x08130D13, 0xCB8, 0x00000813, - 0xCBC, 0x003F1066, + 0xCBC, 0x001F1066, 0xCC0, 0x88A00400, 0xCC4, 0x00200400, 0xCC8, 0x0B200400, @@ -723,9 +851,9 @@ static const u32 rtw8822c_bb[] = { 0x1800, 0x00033312, 0x1804, 0x00033312, 0x180C, 0x17F40060, - 0x1810, 0x02D508C4, + 0x1810, 0x62F508C4, 0x1814, 0x506AA5B4, - 0x1818, 0x000004FF, + 0x1818, 0x000014FF, 0x181C, 0x00000000, 0x1820, 0x02D508CC, 0x1824, 0x506AA5B4, @@ -785,17 +913,17 @@ static const u32 rtw8822c_bb[] = { 0x18FC, 0x7F7F7F7F, 0x1900, 0xA7A7A7A7, 0x1904, 0x95959595, - 0x1908, 0x00777787, + 0x1908, 0x00777788, 0x190C, 0x77776666, 0x1910, 0x00033333, 0x1914, 0xAAAC875A, 0x1918, 0x2AA2A8A2, 0x191C, 0x2AAAA8A2, 0x1920, 0x00878766, - 0x1924, 0x004E4924, - 0x1928, 0x1669B6C0, + 0x1924, 0x000C4924, + 0x1928, 0x5669B6C0, 0x192C, 0x00409190, - 0x1930, 0xB85C0DB6, + 0x1930, 0xB85C0492, 0x1934, 0x00B4A298, 0x1938, 0x00030151, 0x193C, 0x0058C618, @@ -803,7 +931,7 @@ static const u32 rtw8822c_bb[] = { 0x1944, 0x00000BCB, 0x1948, 0xAAAAAAAA, 0x194C, 0x00B99999, - 0x1950, 0x88888665, + 0x1950, 0x88886665, 0x1954, 0x08888888, 0x1958, 0x00000618, 0x195C, 0x00000000, @@ -873,7 +1001,7 @@ static const u32 rtw8822c_bb[] = { 0x1C64, 0x360F0000, 0x1C68, 0x007F0000, 0x1C6C, 0x00010000, - 0x1C70, 0x00031DD5, + 0x1C70, 0x00037FFE, 0x1C74, 0x00000000, 0x1C78, 0x00020000, 0x1C7C, 0x00310000, @@ -967,7 +1095,7 @@ static const u32 rtw8822c_bb[] = { 0x1DE8, 0xFFFF4848, 0x1DEC, 0x00000000, 0x1DF0, 0x00000000, - 0x1DF4, 0x80000000, + 0x1DF4, 0x80000002, 0x1DF8, 0x00000000, 0x1E00, 0x00000000, 0x1E04, 0x00000000, @@ -980,7 +1108,7 @@ static const u32 rtw8822c_bb[] = { 0x1E20, 0x00000000, 0x1E24, 0x80003000, 0x1E28, 0x000CC0C3, - 0x1E2C, 0xE4E4E4E4, + 0x1E2C, 0xE4E40404, 0x1E30, 0xE4E4E4E4, 0x1E34, 0xF3001234, 0x1E38, 0x00000000, @@ -1149,10 +1277,10 @@ static const u32 rtw8822c_bb[] = { 0x4018, 0x2AA2A8A2, 0x401C, 0x2AAAA8A2, 0x4020, 0x00878766, - 0x4024, 0x004E4924, - 0x4028, 0x1669B6C0, + 0x4024, 0x000C4924, + 0x4028, 0x5669B6C0, 0x402C, 0x00409190, - 0x4030, 0xB85C0DB6, + 0x4030, 0xB85C0492, 0x4034, 0x00B4A298, 0x4038, 0x00030151, 0x403C, 0x0058C618, @@ -1160,7 +1288,7 @@ static const u32 rtw8822c_bb[] = { 0x4044, 0x00000BCB, 0x4048, 0xAAAAAAAA, 0x404C, 0x00B98989, - 0x4050, 0x88888665, + 0x4050, 0x88886665, 0x4054, 0x08888888, 0x4058, 0x00000618, 0x405C, 0x00000000, @@ -1206,9 +1334,9 @@ static const u32 rtw8822c_bb[] = { 0x4100, 0x00033312, 0x4104, 0x00033312, 0x410C, 0x17F40060, - 0x4110, 0x02D508C4, + 0x4110, 0x62D508C4, 0x4114, 0x506AA5B4, - 0x4118, 0x000004FF, + 0x4118, 0x000014FF, 0x411C, 0x00000000, 0x4120, 0x02D508CC, 0x4124, 0x506AA5B4, @@ -1307,7 +1435,7 @@ static const u32 rtw8822c_bb[] = { 0x1A08, 0x88838300, 0x1A0C, 0x2E20100F, 0x1A10, 0x9500BB78, - 0x1A14, 0x1114D028, + 0x1A14, 0x111440A8, 0x1A18, 0x00881117, 0x1A1C, 0x89140F00, 0x1A20, 0x52840000, @@ -1330,8 +1458,8 @@ static const u32 rtw8822c_bb[] = { 0x1A64, 0x00000128, 0x1A68, 0x00222211, 0x1A6C, 0x00000000, - 0x1A70, 0x07008000, - 0x1A74, 0x00000148, + 0x1A70, 0x00008000, + 0x1A74, 0x00000048, 0x1A78, 0x000089F0, 0x1A7C, 0x225B0606, 0x1A80, 0x208A7532, @@ -1352,12 +1480,12 @@ static const u32 rtw8822c_bb[] = { 0x1ABC, 0xC2008080, 0x1AC0, 0x54D0A742, 0x1AC4, 0x00000000, - 0x1AC8, 0x00000808, + 0x1AC8, 0x00000807, 0x1ACC, 0x00000707, - 0x1AD0, 0x9D0529F0, - 0x1AD4, 0x0D9D8452, + 0x1AD0, 0xA33529AD, + 0x1AD4, 0x0D8D8452, 0x1AD8, 0x08024024, - 0x1ADC, 0x0011C001, + 0x1ADC, 0x000DB001, 0x1AE0, 0x00600391, 0x1AE4, 0x08000080, 0x1AE8, 0x00000002, @@ -1366,10 +1494,6 @@ static const u32 rtw8822c_bb[] = { 0x1AF4, 0x00000000, 0x1AF8, 0x00000000, 0x1AFC, 0x00000000, - 0x01C, 0x87F6E100, - 0x0EC, 0x87000000, - 0x1100, 0x0C000000, - 0x1044, 0x7CFF7A08, 0x1D0C, 0x00400000, 0x1D0C, 0x00410000, 0x1EE8, 0x00000003, @@ -1637,52 +1761,52 @@ static const u32 rtw8822c_bb[] = { RTW_DECL_TABLE_PHY_COND(rtw8822c_bb, rtw_phy_cfg_bb); static const u32 rtw8822c_bb_pg_type0[] = { - 0, 0, 0, 0x00000c20, 0xffffffff, 0x64687276, - 0, 0, 0, 0x00000c24, 0xffffffff, 0x72768084, - 0, 0, 0, 0x00000c28, 0xffffffff, 0x56606468, - 0, 0, 0, 0x00000c2c, 0xffffffff, 0x68727680, - 0, 0, 0, 0x00000c30, 0xffffffff, 0x52566064, - 0, 0, 1, 0x00000c34, 0xffffffff, 0x68727680, - 0, 0, 1, 0x00000c38, 0xffffffff, 0x52566064, - 0, 0, 0, 0x00000c3c, 0xffffffff, 0x68727680, - 0, 0, 0, 0x00000c40, 0xffffffff, 0x52566064, - 0, 0, 0, 0x00000c44, 0xffffffff, 0x76804448, - 0, 0, 1, 0x00000c48, 0xffffffff, 0x60646872, - 0, 0, 1, 0x00000c4c, 0xffffffff, 0x44485256, - 0, 1, 0, 0x00000e20, 0xffffffff, 0x64687276, - 0, 1, 0, 0x00000e24, 0xffffffff, 0x72768084, - 0, 1, 0, 0x00000e28, 0xffffffff, 0x56606468, - 0, 1, 0, 0x00000e2c, 0xffffffff, 0x68727680, - 0, 1, 0, 0x00000e30, 0xffffffff, 0x52566064, - 0, 1, 1, 0x00000e34, 0xffffffff, 0x68727680, - 0, 1, 1, 0x00000e38, 0xffffffff, 0x52566064, - 0, 1, 0, 0x00000e3c, 0xffffffff, 0x68727680, - 0, 1, 0, 0x00000e40, 0xffffffff, 0x52566064, - 0, 1, 0, 0x00000e44, 0xffffffff, 0x76804448, - 0, 1, 1, 0x00000e48, 0xffffffff, 0x60646872, - 0, 1, 1, 0x00000e4c, 0xffffffff, 0x44485256, - 1, 0, 0, 0x00000c24, 0xffffffff, 0x68727680, - 1, 0, 0, 0x00000c28, 0xffffffff, 0x52566064, - 1, 0, 0, 0x00000c2c, 0xffffffff, 0x64687276, - 1, 0, 0, 0x00000c30, 0xffffffff, 0x48525660, - 1, 0, 1, 0x00000c34, 0xffffffff, 0x64687276, - 1, 0, 1, 0x00000c38, 0xffffffff, 0x48525660, - 1, 0, 0, 0x00000c3c, 0xffffffff, 0x64687276, - 1, 0, 0, 0x00000c40, 0xffffffff, 0x48525660, - 1, 0, 0, 0x00000c44, 0xffffffff, 0x72764044, - 1, 0, 1, 0x00000c48, 0xffffffff, 0x56606468, - 1, 0, 1, 0x00000c4c, 0xffffffff, 0x40444852, - 1, 1, 0, 0x00000e24, 0xffffffff, 0x68727680, - 1, 1, 0, 0x00000e28, 0xffffffff, 0x52566064, - 1, 1, 0, 0x00000e2c, 0xffffffff, 0x64687276, - 1, 1, 0, 0x00000e30, 0xffffffff, 0x48525660, - 1, 1, 1, 0x00000e34, 0xffffffff, 0x64687276, - 1, 1, 1, 0x00000e38, 0xffffffff, 0x48525660, - 1, 1, 0, 0x00000e3c, 0xffffffff, 0x64687276, - 1, 1, 0, 0x00000e40, 0xffffffff, 0x48525660, - 1, 1, 0, 0x00000e44, 0xffffffff, 0x72764044, - 1, 1, 1, 0x00000e48, 0xffffffff, 0x56606468, - 1, 1, 1, 0x00000e4c, 0xffffffff, 0x40444852 + 0, 0, 0, 0x00000c20, 0xffffffff, 0x484c5054, + 0, 0, 0, 0x00000c24, 0xffffffff, 0x54585c60, + 0, 0, 0, 0x00000c28, 0xffffffff, 0x44484c50, + 0, 0, 0, 0x00000c2c, 0xffffffff, 0x5054585c, + 0, 0, 0, 0x00000c30, 0xffffffff, 0x4044484c, + 0, 0, 1, 0x00000c34, 0xffffffff, 0x5054585c, + 0, 0, 1, 0x00000c38, 0xffffffff, 0x4044484c, + 0, 0, 0, 0x00000c3c, 0xffffffff, 0x5054585c, + 0, 0, 0, 0x00000c40, 0xffffffff, 0x4044484c, + 0, 0, 0, 0x00000c44, 0xffffffff, 0x585c383c, + 0, 0, 1, 0x00000c48, 0xffffffff, 0x484c5054, + 0, 0, 1, 0x00000c4c, 0xffffffff, 0x383c4044, + 0, 1, 0, 0x00000e20, 0xffffffff, 0x484c5054, + 0, 1, 0, 0x00000e24, 0xffffffff, 0x54585c60, + 0, 1, 0, 0x00000e28, 0xffffffff, 0x44484c50, + 0, 1, 0, 0x00000e2c, 0xffffffff, 0x5054585c, + 0, 1, 0, 0x00000e30, 0xffffffff, 0x4044484c, + 0, 1, 1, 0x00000e34, 0xffffffff, 0x5054585c, + 0, 1, 1, 0x00000e38, 0xffffffff, 0x4044484c, + 0, 1, 0, 0x00000e3c, 0xffffffff, 0x5054585c, + 0, 1, 0, 0x00000e40, 0xffffffff, 0x4044484c, + 0, 1, 0, 0x00000e44, 0xffffffff, 0x585c383c, + 0, 1, 1, 0x00000e48, 0xffffffff, 0x484c5054, + 0, 1, 1, 0x00000e4c, 0xffffffff, 0x383c4044, + 1, 0, 0, 0x00000c24, 0xffffffff, 0x54585c60, + 1, 0, 0, 0x00000c28, 0xffffffff, 0x44484c50, + 1, 0, 0, 0x00000c2c, 0xffffffff, 0x5054585c, + 1, 0, 0, 0x00000c30, 0xffffffff, 0x4044484c, + 1, 0, 1, 0x00000c34, 0xffffffff, 0x5054585c, + 1, 0, 1, 0x00000c38, 0xffffffff, 0x4044484c, + 1, 0, 0, 0x00000c3c, 0xffffffff, 0x5054585c, + 1, 0, 0, 0x00000c40, 0xffffffff, 0x4044484c, + 1, 0, 0, 0x00000c44, 0xffffffff, 0x585c383c, + 1, 0, 1, 0x00000c48, 0xffffffff, 0x484c5054, + 1, 0, 1, 0x00000c4c, 0xffffffff, 0x383c4044, + 1, 1, 0, 0x00000e24, 0xffffffff, 0x54585c60, + 1, 1, 0, 0x00000e28, 0xffffffff, 0x44484c50, + 1, 1, 0, 0x00000e2c, 0xffffffff, 0x5054585c, + 1, 1, 0, 0x00000e30, 0xffffffff, 0x4044484c, + 1, 1, 1, 0x00000e34, 0xffffffff, 0x5054585c, + 1, 1, 1, 0x00000e38, 0xffffffff, 0x4044484c, + 1, 1, 0, 0x00000e3c, 0xffffffff, 0x5054585c, + 1, 1, 0, 0x00000e40, 0xffffffff, 0x4044484c, + 1, 1, 0, 0x00000e44, 0xffffffff, 0x585c383c, + 1, 1, 1, 0x00000e48, 0xffffffff, 0x484c5054, + 1, 1, 1, 0x00000e4c, 0xffffffff, 0x383c4044 }; RTW_DECL_TABLE_BB_PG(rtw8822c_bb_pg_type0); @@ -1690,12 +1814,96 @@ RTW_DECL_TABLE_BB_PG(rtw8822c_bb_pg_type0); static const u32 rtw8822c_rf_a[] = { 0x000, 0x00030000, 0x018, 0x00013124, + 0x093, 0x0008483F, 0x0DE, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000B9140, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000B9140, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x08E, 0x000A5540, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000A5540, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000A5540, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000A5540, + 0xA0000000, 0x00000000, + 0x08E, 0x000A5540, + 0xB0000000, 0x00000000, 0x081, 0x0000FC01, 0x081, 0x0002FC01, 0x081, 0x0003FC01, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x085, 0x0006A06C, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x085, 0x0006A06C, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x085, 0x0006A06C, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x085, 0x0006A06C, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x085, 0x0006A06C, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x085, 0x0006A06C, + 0xA0000000, 0x00000000, + 0x085, 0x0006A06C, + 0xB0000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0xA0000000, 0x00000000, 0x0EE, 0x00000010, 0x033, 0x00000001, 0x03F, 0x0000003F, @@ -1704,17 +1912,71 @@ static const u32 rtw8822c_rf_a[] = { 0x033, 0x00000002, 0x03F, 0x0000003F, 0x0EE, 0x00000000, + 0xB0000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x0EF, 0x00010000, 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, 0x03F, 0x000773E8, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, + 0x03F, 0x000773E8, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, 0x03F, 0x000FF3A0, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, 0x033, 0x0000000D, - 0x03F, 0x00000380, + 0x03F, 0x000773E8, 0x033, 0x0000000C, - 0x03F, 0x000FF380, + 0x03F, 0x000FF3E8, 0x033, 0x0000000B, - 0x03F, 0x00000300, + 0x03F, 0x000FF3A0, 0x033, 0x0000000A, 0x03F, 0x000002A8, 0x033, 0x00000009, @@ -1729,156 +1991,4894 @@ static const u32 rtw8822c_rf_a[] = { 0x03F, 0x00000180, 0x033, 0x00000004, 0x03F, 0x00000040, - 0x033, 0x00000003, - 0x03F, 0x00000000, - 0x033, 0x0000001F, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, 0x03F, 0x000773E8, - 0x033, 0x0000001E, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, 0x03F, 0x000FF3A0, - 0x033, 0x0000001D, - 0x03F, 0x00000380, - 0x033, 0x0000001C, - 0x03F, 0x000FF380, - 0x033, 0x0000001B, - 0x03F, 0x00000300, - 0x033, 0x0000001A, + 0x033, 0x0000000A, 0x03F, 0x000002A8, - 0x033, 0x00000019, + 0x033, 0x00000009, 0x03F, 0x00000280, - 0x033, 0x00000018, + 0x033, 0x00000008, 0x03F, 0x000FF280, - 0x033, 0x00000017, + 0x033, 0x00000007, 0x03F, 0x00000200, - 0x033, 0x00000016, + 0x033, 0x00000006, 0x03F, 0x000001C0, - 0x033, 0x00000015, + 0x033, 0x00000005, 0x03F, 0x00000180, - 0x033, 0x00000014, + 0x033, 0x00000004, 0x03F, 0x00000040, - 0x033, 0x00000013, - 0x03F, 0x00000000, - 0x033, 0x0000002F, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, 0x03F, 0x000773E8, - 0x033, 0x0000002E, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, 0x03F, 0x000FF3A0, - 0x033, 0x0000002D, - 0x03F, 0x00000380, - 0x033, 0x0000002C, - 0x03F, 0x000FF380, - 0x033, 0x0000002B, - 0x03F, 0x00000300, - 0x033, 0x0000002A, + 0x033, 0x0000000A, 0x03F, 0x000002A8, - 0x033, 0x00000029, + 0x033, 0x00000009, 0x03F, 0x00000280, - 0x033, 0x00000028, + 0x033, 0x00000008, 0x03F, 0x000FF280, - 0x033, 0x00000027, + 0x033, 0x00000007, 0x03F, 0x00000200, - 0x033, 0x00000026, + 0x033, 0x00000006, 0x03F, 0x000001C0, - 0x033, 0x00000025, + 0x033, 0x00000005, 0x03F, 0x00000180, - 0x033, 0x00000024, + 0x033, 0x00000004, 0x03F, 0x00000040, - 0x033, 0x00000023, - 0x03F, 0x00000000, - 0x033, 0x0000003F, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, 0x03F, 0x000773E8, - 0x033, 0x0000003E, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, 0x03F, 0x000FF3A0, - 0x033, 0x0000003D, - 0x03F, 0x00000380, - 0x033, 0x0000003C, - 0x03F, 0x000FF380, - 0x033, 0x0000003B, - 0x03F, 0x00000300, - 0x033, 0x0000003A, + 0x033, 0x0000000A, 0x03F, 0x000002A8, - 0x033, 0x00000039, + 0x033, 0x00000009, 0x03F, 0x00000280, - 0x033, 0x00000038, + 0x033, 0x00000008, 0x03F, 0x000FF280, - 0x033, 0x00000037, + 0x033, 0x00000007, 0x03F, 0x00000200, - 0x033, 0x00000036, + 0x033, 0x00000006, 0x03F, 0x000001C0, - 0x033, 0x00000035, + 0x033, 0x00000005, 0x03F, 0x00000180, - 0x033, 0x00000034, + 0x033, 0x00000004, 0x03F, 0x00000040, - 0x033, 0x00000033, - 0x03F, 0x00000000, - 0x033, 0x0000004F, + 0xA0000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, 0x03F, 0x000773E8, - 0x033, 0x0000004E, + 0x033, 0x0000000E, 0x03F, 0x000FF3A0, - 0x033, 0x0000004D, + 0x033, 0x0000000D, 0x03F, 0x00000380, - 0x033, 0x0000004C, + 0x033, 0x0000000C, 0x03F, 0x000FF380, - 0x033, 0x0000004B, + 0x033, 0x0000000B, 0x03F, 0x00000300, - 0x033, 0x0000004A, + 0x033, 0x0000000A, 0x03F, 0x000002A8, - 0x033, 0x00000049, + 0x033, 0x00000009, 0x03F, 0x00000280, - 0x033, 0x00000048, + 0x033, 0x00000008, 0x03F, 0x000FF280, - 0x033, 0x00000047, + 0x033, 0x00000007, 0x03F, 0x00000200, - 0x033, 0x00000046, + 0x033, 0x00000006, 0x03F, 0x000001C0, - 0x033, 0x00000045, + 0x033, 0x00000005, 0x03F, 0x00000180, - 0x033, 0x00000044, + 0x033, 0x00000004, 0x03F, 0x00000040, - 0x033, 0x00000043, + 0xB0000000, 0x00000000, + 0x033, 0x00000003, 0x03F, 0x00000000, - 0x033, 0x0000005F, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, 0x03F, 0x000773E8, - 0x033, 0x0000005E, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, 0x03F, 0x000FF3A0, - 0x033, 0x0000005D, - 0x03F, 0x00000380, - 0x033, 0x0000005C, - 0x03F, 0x000FF380, - 0x033, 0x0000005B, - 0x03F, 0x00000300, - 0x033, 0x0000005A, + 0x033, 0x0000001A, 0x03F, 0x000002A8, - 0x033, 0x00000059, + 0x033, 0x00000019, 0x03F, 0x00000280, - 0x033, 0x00000058, + 0x033, 0x00000018, 0x03F, 0x000FF280, - 0x033, 0x00000057, + 0x033, 0x00000017, 0x03F, 0x00000200, - 0x033, 0x00000056, + 0x033, 0x00000016, 0x03F, 0x000001C0, - 0x033, 0x00000055, + 0x033, 0x00000015, 0x03F, 0x00000180, - 0x033, 0x00000054, + 0x033, 0x00000014, 0x03F, 0x00000040, - 0x033, 0x00000053, - 0x03F, 0x00000000, - 0x0EF, 0x00000000, - 0x08A, 0x000E7DE3, - 0x08B, 0x0008FE00, - 0x0EE, 0x00000008, - 0x033, 0x00000000, - 0x03F, 0x00000023, - 0x033, 0x00000001, - 0x03F, 0x00000023, - 0x0EE, 0x00000000, - 0x0EF, 0x00004000, - 0x033, 0x00000000, - 0x03F, 0x0000000F, - 0x033, 0x00000002, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773E8, + 0x033, 0x0000001E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001D, + 0x03F, 0x00000380, + 0x033, 0x0000001C, + 0x03F, 0x000FF380, + 0x033, 0x0000001B, + 0x03F, 0x00000300, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000013, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773E8, + 0x033, 0x0000002E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002D, + 0x03F, 0x00000380, + 0x033, 0x0000002C, + 0x03F, 0x000FF380, + 0x033, 0x0000002B, + 0x03F, 0x00000300, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000023, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773E8, + 0x033, 0x0000003E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003D, + 0x03F, 0x00000380, + 0x033, 0x0000003C, + 0x03F, 0x000FF380, + 0x033, 0x0000003B, + 0x03F, 0x00000300, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000033, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773E8, + 0x033, 0x0000004E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004D, + 0x03F, 0x00000380, + 0x033, 0x0000004C, + 0x03F, 0x000FF380, + 0x033, 0x0000004B, + 0x03F, 0x00000300, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000043, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773E8, + 0x033, 0x0000005E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005D, + 0x03F, 0x00000380, + 0x033, 0x0000005C, + 0x03F, 0x000FF380, + 0x033, 0x0000005B, + 0x03F, 0x00000300, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000053, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0xA0000000, 0x00000000, + 0x0EF, 0x00000000, + 0xB0000000, 0x00000000, + 0x08A, 0x000E7DE3, + 0x08B, 0x0008FE00, + 0x0EE, 0x00000008, + 0x033, 0x00000000, + 0x03F, 0x00000023, + 0x033, 0x00000001, + 0x03F, 0x00000023, + 0x0EE, 0x00000000, + 0x0EF, 0x00004000, + 0x033, 0x00000000, + 0x03F, 0x0000000F, + 0x033, 0x00000002, + 0x03F, 0x00000000, + 0x0EF, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000020, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000021, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000022, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000023, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000020, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000021, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000022, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000023, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000020, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000021, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000022, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000023, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000020, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000021, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000022, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000023, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000020, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000021, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000022, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000023, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000020, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000021, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000022, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000023, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0xA0000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001910, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000008, + 0x03E, 0x00001910, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000010, + 0x03E, 0x00001910, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001910, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000020, + 0x03E, 0x00001910, + 0x03F, 0x00020000, + 0x033, 0x00000021, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000022, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000023, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001910, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0xB0000000, 0x00000000, + 0x0FE, 0x00000000, + 0x01B, 0x00003A40, + 0x061, 0x0000D233, + 0x062, 0x0004D232, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0xA0000000, 0x00000000, + 0x063, 0x00000C02, + 0xB0000000, 0x00000000, + 0x0EF, 0x00000200, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0xA0000000, 0x00000000, + 0x030, 0x00000233, + 0x030, 0x00001233, + 0x030, 0x00002233, + 0x030, 0x00003233, + 0x030, 0x00004203, + 0x030, 0x00005233, + 0x030, 0x00006233, + 0x030, 0x00007233, + 0x030, 0x00008203, + 0x030, 0x00009233, + 0x030, 0x0000A233, + 0x030, 0x0000B233, + 0x030, 0x0000C233, + 0x030, 0x0000D233, + 0x030, 0x0000E203, + 0x030, 0x0000F233, + 0x030, 0x00010233, + 0x030, 0x00011233, + 0x030, 0x00012203, + 0x030, 0x00013233, + 0x030, 0x00014233, + 0x030, 0x00015233, + 0x030, 0x00016203, + 0x030, 0x00017233, + 0x030, 0x00018203, + 0x030, 0x00019233, + 0xB0000000, 0x00000000, + 0x0EF, 0x00000000, + 0x0EF, 0x00000080, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0xA0000000, 0x00000000, + 0x030, 0x00000232, + 0x030, 0x00001232, + 0x030, 0x00002232, + 0x030, 0x00003232, + 0x030, 0x00004232, + 0x030, 0x00005232, + 0x030, 0x00006232, + 0x030, 0x00007232, + 0x030, 0x00008232, + 0x030, 0x00009232, + 0x030, 0x0000A232, + 0x030, 0x0000B232, + 0xB0000000, 0x00000000, + 0x0EF, 0x00000000, + 0x0EF, 0x00000040, + 0x030, 0x00000770, + 0x030, 0x00001770, + 0x030, 0x00002440, + 0x030, 0x00003440, + 0x030, 0x00004330, + 0x030, 0x00005330, + 0x030, 0x00008770, + 0x030, 0x0000A440, + 0x030, 0x0000C330, + 0x0EF, 0x00000000, + 0x0EE, 0x00010000, + 0x033, 0x00000200, + 0x03F, 0x0000006A, + 0x033, 0x00000201, + 0x03F, 0x0000006D, + 0x033, 0x00000202, + 0x03F, 0x0000046A, + 0x033, 0x00000203, + 0x03F, 0x0000086A, + 0x033, 0x00000204, + 0x03F, 0x00000C89, + 0x033, 0x00000205, + 0x03F, 0x00000CE8, + 0x033, 0x00000206, + 0x03F, 0x00000CEB, + 0x033, 0x00000207, + 0x03F, 0x00000CEE, + 0x033, 0x00000208, + 0x03F, 0x00000CF1, + 0x033, 0x00000209, + 0x03F, 0x00000CF4, + 0x033, 0x0000020A, + 0x03F, 0x00000CF7, + 0x033, 0x00000280, + 0x03F, 0x0000006A, + 0x033, 0x00000281, + 0x03F, 0x0000006D, + 0x033, 0x00000282, + 0x03F, 0x0000046A, + 0x033, 0x00000283, + 0x03F, 0x0000086A, + 0x033, 0x00000284, + 0x03F, 0x00000C89, + 0x033, 0x00000285, + 0x03F, 0x00000CE8, + 0x033, 0x00000286, + 0x03F, 0x00000CEB, + 0x033, 0x00000287, + 0x03F, 0x00000CEE, + 0x033, 0x00000288, + 0x03F, 0x00000CF1, + 0x033, 0x00000289, + 0x03F, 0x00000CF4, + 0x033, 0x0000028A, + 0x03F, 0x00000CF7, + 0x033, 0x00000300, + 0x03F, 0x0000006A, + 0x033, 0x00000301, + 0x03F, 0x0000006D, + 0x033, 0x00000302, + 0x03F, 0x0000046A, + 0x033, 0x00000303, + 0x03F, 0x0000086A, + 0x033, 0x00000304, + 0x03F, 0x00000C89, + 0x033, 0x00000305, + 0x03F, 0x00000CE8, + 0x033, 0x00000306, + 0x03F, 0x00000CEB, + 0x033, 0x00000307, + 0x03F, 0x00000CEE, + 0x033, 0x00000308, + 0x03F, 0x00000CF1, + 0x033, 0x00000309, + 0x03F, 0x00000CF4, + 0x033, 0x0000030A, + 0x03F, 0x00000CF7, + 0x0EE, 0x00000000, + 0x051, 0x0003C800, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0xA0000000, 0x00000000, + 0x052, 0x000942CA, + 0xB0000000, 0x00000000, + 0x053, 0x000090F9, + 0x054, 0x00088000, + 0x057, 0x0004C80A, + 0x0EF, 0x00000020, + 0x033, 0x00000000, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000001, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000002, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000003, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000004, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000005, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000006, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000007, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000008, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000009, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000000A, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000000B, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000000C, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000000D, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000000E, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00010E46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000000F, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000010, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000011, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00030246, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000012, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000013, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000014, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000015, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000016, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000017, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000018, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000019, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000001A, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000001B, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000001C, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000001D, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000001E, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000001F, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000020, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000021, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000022, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000023, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000024, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000025, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000026, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000027, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000028, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x00000029, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00031E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x033, 0x0000002A, + 0x03E, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0000EA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00021E46, + 0xA0000000, 0x00000000, + 0x03F, 0x00002A46, + 0xB0000000, 0x00000000, + 0x0EF, 0x00000000, + 0x0EE, 0x00010000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0xA0000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000487, + 0x033, 0x00000061, + 0x03F, 0x00000887, + 0x033, 0x00000062, + 0x03F, 0x00000947, + 0x033, 0x00000063, + 0x03F, 0x00000D48, + 0x033, 0x00000064, + 0x03F, 0x00000D88, + 0x033, 0x00000065, + 0x03F, 0x00000DE8, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0xB0000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0xA0000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000487, + 0x033, 0x00000021, + 0x03F, 0x00000887, + 0x033, 0x00000022, + 0x03F, 0x00000947, + 0x033, 0x00000023, + 0x03F, 0x00000D48, + 0x033, 0x00000024, + 0x03F, 0x00000D88, + 0x033, 0x00000025, + 0x03F, 0x00000DE8, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0xB0000000, 0x00000000, + 0x0EE, 0x00000000, + 0x05C, 0x000FCC00, + 0x067, 0x0000A505, + 0x0D3, 0x00000542, + 0x043, 0x00005000, + 0x07F, 0x00000000, + 0x0B0, 0x0001F0FC, + 0x0B1, 0x0007DBE4, + 0x0B2, 0x00022400, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0xA0000000, 0x00000000, + 0x0B3, 0x0007C760, + 0xB0000000, 0x00000000, + 0x0B4, 0x00099D40, + 0x0B5, 0x0004103F, + 0x0B6, 0x000187F8, + 0x0B7, 0x00030018, + 0x0BC, 0x00000008, + 0x0D3, 0x00000542, + 0x0DD, 0x00000500, + 0x0BB, 0x00040010, + 0x0B0, 0x0001F0FA, + 0x0FE, 0x00000000, + 0x0CA, 0x00080000, + 0x0CA, 0x00080001, + 0x0FE, 0x00000000, + 0x0B0, 0x0001F0F8, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C700, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C700, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C700, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C700, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C700, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C700, + 0xA0000000, 0x00000000, + 0x0B3, 0x0007C700, + 0xB0000000, 0x00000000, + 0x018, 0x0001B124, + 0xFFE, 0x00000000, + 0xFFE, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0B3, 0x0007C760, + 0xA0000000, 0x00000000, + 0x0B3, 0x0007C760, + 0xB0000000, 0x00000000, + 0x018, 0x00013124, + 0x0CC, 0x0000F000, + 0x0CD, 0x00089600, + 0x018, 0x00013108, + 0x0FE, 0x00000000, + 0x0B8, 0x000C0440, + 0x0BA, 0x000E840D, + 0x0FE, 0x00000000, + 0x018, 0x00013124, + 0x059, 0x000A0000, + 0x05A, 0x00060000, + 0x05B, 0x00014000, + 0x0ED, 0x00000008, + 0x033, 0x00000001, + 0x03F, 0x0000000F, + 0x0ED, 0x00000000, + 0x0EE, 0x00000002, + 0x033, 0x00000017, + 0x03F, 0x0000003F, + 0x033, 0x00000018, + 0x03F, 0x0000003F, + 0x033, 0x00000019, + 0x03F, 0x00000000, + 0x033, 0x0000001A, + 0x03F, 0x0000003F, + 0x033, 0x0000001B, + 0x03F, 0x0000003F, + 0x033, 0x0000001C, + 0x03F, 0x0000003F, + 0x0EE, 0x00000000, + 0x0ED, 0x00000200, + 0x033, 0x00000000, + 0x03F, 0x000F45A4, + 0x033, 0x00000001, + 0x03F, 0x000F49A4, + 0x033, 0x00000002, + 0x03F, 0x000F49A4, + 0x033, 0x00000003, + 0x03F, 0x000F69A4, + 0x033, 0x00000004, + 0x03F, 0x000F69A4, + 0x033, 0x00000005, + 0x03F, 0x000F69A4, + 0x033, 0x00000006, + 0x03F, 0x000F6DA4, + 0x033, 0x00000007, + 0x03F, 0x000F6DA4, + 0x033, 0x00000008, + 0x03F, 0x000F6DA4, + 0x033, 0x00000009, + 0x03F, 0x000F8DA4, + 0x033, 0x0000000A, + 0x03F, 0x000F8DA4, + 0x033, 0x0000000B, + 0x03F, 0x000F8DA4, + 0x033, 0x0000000C, + 0x03F, 0x000F91A4, + 0x033, 0x0000000D, + 0x03F, 0x000F91A4, + 0x033, 0x0000000E, + 0x03F, 0x000F91A4, + 0x033, 0x0000000F, + 0x03F, 0x000FB1A4, + 0x033, 0x00000010, + 0x03F, 0x000FB1A4, + 0x033, 0x00000011, + 0x03F, 0x000FB1A4, + 0x033, 0x00000012, + 0x03F, 0x000FB5A4, + 0x033, 0x00000013, + 0x03F, 0x000FB5A4, + 0x033, 0x00000014, + 0x03F, 0x000FD9A4, + 0x033, 0x00000015, + 0x03F, 0x000FD9A4, + 0x033, 0x00000016, + 0x03F, 0x000FF9A4, + 0x033, 0x00000017, + 0x03F, 0x000FF9A4, + 0x033, 0x00000018, + 0x03F, 0x000FFDA4, + 0x033, 0x00000019, + 0x03F, 0x000FFDA4, + 0x033, 0x0000001A, + 0x03F, 0x000FFDA4, + 0x0ED, 0x00000000, + 0x092, 0x00084800, + 0x092, 0x00084801, + 0x0FE, 0x00000000, + 0x0FE, 0x00000000, + 0x0FE, 0x00000000, + 0x0FE, 0x00000000, + 0x092, 0x00084800, + 0x08F, 0x0000182C, + 0x088, 0x0004326B, + 0x019, 0x00000005, +}; + +RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_a, A); + +static const u32 rtw8822c_rf_b[] = { + 0x000, 0x00030000, + 0x018, 0x00013124, + 0x093, 0x0008483F, + 0x0EF, 0x00080000, + 0x033, 0x00000001, + 0x03F, 0x00091020, + 0x0EF, 0x00000000, + 0x0DE, 0x00000020, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000B9140, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000B9140, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000A5540, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000A5540, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000A5540, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x08E, 0x000A5540, + 0xA0000000, 0x00000000, + 0x08E, 0x000A5540, + 0xB0000000, 0x00000000, + 0x081, 0x0000FC01, + 0x081, 0x0002FC01, + 0x081, 0x0003FC01, + 0x085, 0x0006A06C, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000001, + 0x03F, 0x0000002A, + 0x033, 0x00000002, + 0x03F, 0x0000002A, + 0x0EE, 0x00000000, + 0xA0000000, 0x00000000, + 0x0EE, 0x00000010, + 0x033, 0x00000001, + 0x03F, 0x0000003F, + 0x033, 0x00000001, + 0x03F, 0x0000003F, + 0x033, 0x00000002, + 0x03F, 0x0000003F, + 0x0EE, 0x00000000, + 0xB0000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, + 0x03F, 0x000773E8, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, + 0x03F, 0x000773E8, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, + 0x03F, 0x000773E8, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, + 0x03F, 0x000773E8, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, + 0x03F, 0x000773E8, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773C0, + 0x033, 0x0000000E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000000D, + 0x03F, 0x000773E8, + 0x033, 0x0000000C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000000B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x0EF, 0x00010000, + 0x033, 0x0000000F, + 0x03F, 0x000773E8, + 0x033, 0x0000000E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000000D, + 0x03F, 0x00000380, + 0x033, 0x0000000C, + 0x03F, 0x000FF380, + 0x033, 0x0000000B, + 0x03F, 0x00000300, + 0x033, 0x0000000A, + 0x03F, 0x000002A8, + 0x033, 0x00000009, + 0x03F, 0x00000280, + 0x033, 0x00000008, + 0x03F, 0x000FF280, + 0x033, 0x00000007, + 0x03F, 0x00000200, + 0x033, 0x00000006, + 0x03F, 0x000001C0, + 0x033, 0x00000005, + 0x03F, 0x00000180, + 0x033, 0x00000004, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000003, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773C0, + 0x033, 0x0000001E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000001D, + 0x03F, 0x000773E8, + 0x033, 0x0000001C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000001B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000001F, + 0x03F, 0x000773E8, + 0x033, 0x0000001E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000001D, + 0x03F, 0x00000380, + 0x033, 0x0000001C, + 0x03F, 0x000FF380, + 0x033, 0x0000001B, + 0x03F, 0x00000300, + 0x033, 0x0000001A, + 0x03F, 0x000002A8, + 0x033, 0x00000019, + 0x03F, 0x00000280, + 0x033, 0x00000018, + 0x03F, 0x000FF280, + 0x033, 0x00000017, + 0x03F, 0x00000200, + 0x033, 0x00000016, + 0x03F, 0x000001C0, + 0x033, 0x00000015, + 0x03F, 0x00000180, + 0x033, 0x00000014, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000013, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773C0, + 0x033, 0x0000002E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000002D, + 0x03F, 0x000773E8, + 0x033, 0x0000002C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000002B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000002F, + 0x03F, 0x000773E8, + 0x033, 0x0000002E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000002D, + 0x03F, 0x00000380, + 0x033, 0x0000002C, + 0x03F, 0x000FF380, + 0x033, 0x0000002B, + 0x03F, 0x00000300, + 0x033, 0x0000002A, + 0x03F, 0x000002A8, + 0x033, 0x00000029, + 0x03F, 0x00000280, + 0x033, 0x00000028, + 0x03F, 0x000FF280, + 0x033, 0x00000027, + 0x03F, 0x00000200, + 0x033, 0x00000026, + 0x03F, 0x000001C0, + 0x033, 0x00000025, + 0x03F, 0x00000180, + 0x033, 0x00000024, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000023, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773C0, + 0x033, 0x0000003E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000003D, + 0x03F, 0x000773E8, + 0x033, 0x0000003C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000003B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000003F, + 0x03F, 0x000773E8, + 0x033, 0x0000003E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000003D, + 0x03F, 0x00000380, + 0x033, 0x0000003C, + 0x03F, 0x000FF380, + 0x033, 0x0000003B, + 0x03F, 0x00000300, + 0x033, 0x0000003A, + 0x03F, 0x000002A8, + 0x033, 0x00000039, + 0x03F, 0x00000280, + 0x033, 0x00000038, + 0x03F, 0x000FF280, + 0x033, 0x00000037, + 0x03F, 0x00000200, + 0x033, 0x00000036, + 0x03F, 0x000001C0, + 0x033, 0x00000035, + 0x03F, 0x00000180, + 0x033, 0x00000034, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000033, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773C0, + 0x033, 0x0000004E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000004D, + 0x03F, 0x000773E8, + 0x033, 0x0000004C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000004B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000004F, + 0x03F, 0x000773E8, + 0x033, 0x0000004E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000004D, + 0x03F, 0x00000380, + 0x033, 0x0000004C, + 0x03F, 0x000FF380, + 0x033, 0x0000004B, + 0x03F, 0x00000300, + 0x033, 0x0000004A, + 0x03F, 0x000002A8, + 0x033, 0x00000049, + 0x03F, 0x00000280, + 0x033, 0x00000048, + 0x03F, 0x000FF280, + 0x033, 0x00000047, + 0x03F, 0x00000200, + 0x033, 0x00000046, + 0x03F, 0x000001C0, + 0x033, 0x00000045, + 0x03F, 0x00000180, + 0x033, 0x00000044, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000043, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773C0, + 0x033, 0x0000005E, + 0x03F, 0x000FF3C0, + 0x033, 0x0000005D, + 0x03F, 0x000773E8, + 0x033, 0x0000005C, + 0x03F, 0x000FF3E8, + 0x033, 0x0000005B, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0xA0000000, 0x00000000, + 0x033, 0x0000005F, + 0x03F, 0x000773E8, + 0x033, 0x0000005E, + 0x03F, 0x000FF3A0, + 0x033, 0x0000005D, + 0x03F, 0x00000380, + 0x033, 0x0000005C, + 0x03F, 0x000FF380, + 0x033, 0x0000005B, + 0x03F, 0x00000300, + 0x033, 0x0000005A, + 0x03F, 0x000002A8, + 0x033, 0x00000059, + 0x03F, 0x00000280, + 0x033, 0x00000058, + 0x03F, 0x000FF280, + 0x033, 0x00000057, + 0x03F, 0x00000200, + 0x033, 0x00000056, + 0x03F, 0x000001C0, + 0x033, 0x00000055, + 0x03F, 0x00000180, + 0x033, 0x00000054, + 0x03F, 0x00000040, + 0xB0000000, 0x00000000, + 0x033, 0x00000053, + 0x03F, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00000000, + 0xA0000000, 0x00000000, + 0x0EF, 0x00000000, + 0xB0000000, 0x00000000, + 0x08A, 0x000E7DE3, + 0x08B, 0x0008FE00, + 0x0EE, 0x00000008, + 0x033, 0x00000000, + 0x03F, 0x00000023, + 0x033, 0x00000001, + 0x03F, 0x00000023, + 0x0EE, 0x00000000, + 0x0EF, 0x00004000, + 0x033, 0x00000000, + 0x03F, 0x0000000F, + 0x033, 0x00000002, 0x03F, 0x00000000, 0x0EF, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x0EF, 0x00020000, 0x033, 0x00000000, - 0x03E, 0x00001910, + 0x03E, 0x00001C86, 0x03F, 0x00020000, 0x033, 0x00000001, 0x03E, 0x00001C02, @@ -1900,9 +6900,9 @@ static const u32 rtw8822c_rf_a[] = { 0x03F, 0x00020000, 0x033, 0x00000007, 0x03E, 0x00000000, - 0x03F, 0x0002C010, + 0x03F, 0x0002F81C, 0x033, 0x00000008, - 0x03E, 0x00001910, + 0x03E, 0x00001C86, 0x03F, 0x00020000, 0x033, 0x00000009, 0x03E, 0x00001C02, @@ -1924,9 +6924,9 @@ static const u32 rtw8822c_rf_a[] = { 0x03F, 0x00020000, 0x033, 0x0000000F, 0x03E, 0x00000000, - 0x03F, 0x0002C010, + 0x03F, 0x0002F81C, 0x033, 0x00000010, - 0x03E, 0x00001910, + 0x03E, 0x00001C86, 0x03F, 0x00020000, 0x033, 0x00000011, 0x03E, 0x00001C02, @@ -1950,7 +6950,7 @@ static const u32 rtw8822c_rf_a[] = { 0x03E, 0x00000000, 0x03F, 0x0002C010, 0x033, 0x00000018, - 0x03E, 0x00001910, + 0x03E, 0x00001C86, 0x03F, 0x00020000, 0x033, 0x00000019, 0x03E, 0x00001C02, @@ -1974,7 +6974,7 @@ static const u32 rtw8822c_rf_a[] = { 0x03E, 0x00000000, 0x03F, 0x0002C010, 0x033, 0x00000020, - 0x03E, 0x00001910, + 0x03E, 0x00001C86, 0x03F, 0x00020000, 0x033, 0x00000021, 0x03E, 0x00001C02, @@ -1984,1077 +6984,780 @@ static const u32 rtw8822c_rf_a[] = { 0x03F, 0x00020000, 0x033, 0x00000023, 0x03E, 0x00000F00, - 0x03F, 0x00020000, - 0x033, 0x00000024, - 0x03E, 0x00000086, - 0x03F, 0x00020000, - 0x033, 0x00000025, - 0x03E, 0x00000002, - 0x03F, 0x00020000, - 0x033, 0x00000026, - 0x03E, 0x00000000, - 0x03F, 0x00020000, - 0x033, 0x00000027, - 0x03E, 0x00000000, - 0x03F, 0x0002C010, - 0x033, 0x00000028, - 0x03E, 0x00001910, - 0x03F, 0x00020000, - 0x033, 0x00000029, - 0x03E, 0x00001C02, - 0x03F, 0x00020000, - 0x033, 0x0000002A, - 0x03E, 0x00000F02, - 0x03F, 0x00020000, - 0x033, 0x0000002B, - 0x03E, 0x00000F00, - 0x03F, 0x00020000, - 0x033, 0x0000002C, - 0x03E, 0x00000086, - 0x03F, 0x00020000, - 0x033, 0x0000002D, - 0x03E, 0x00000002, - 0x03F, 0x00020000, - 0x033, 0x0000002E, - 0x03E, 0x00000000, - 0x03F, 0x00020000, - 0x033, 0x0000002F, - 0x03E, 0x00000000, - 0x03F, 0x0002C010, - 0x0EF, 0x00000000, - 0x061, 0x0000D233, - 0x062, 0x0004D232, - 0x063, 0x00000C02, - 0x0EF, 0x00000200, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x030, 0x00000237, - 0x030, 0x00001237, - 0x030, 0x00002237, - 0x030, 0x00003237, - 0x030, 0x00004207, - 0x030, 0x00005237, - 0x030, 0x00006237, - 0x030, 0x00007237, - 0x030, 0x00008207, - 0x030, 0x00009237, - 0x030, 0x0000A237, - 0x030, 0x0000B237, - 0x030, 0x0000C237, - 0x030, 0x0000D237, - 0x030, 0x0000E207, - 0x030, 0x0000F237, - 0x030, 0x00010237, - 0x030, 0x00011237, - 0x030, 0x00012207, - 0x030, 0x00013237, - 0x030, 0x00014237, - 0x030, 0x00015237, - 0x030, 0x00016207, - 0x030, 0x00017237, - 0x030, 0x00018207, - 0x030, 0x00019237, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x030, 0x00000237, - 0x030, 0x00001237, - 0x030, 0x00002237, - 0x030, 0x00003237, - 0x030, 0x00004207, - 0x030, 0x00005237, - 0x030, 0x00006237, - 0x030, 0x00007237, - 0x030, 0x00008207, - 0x030, 0x00009237, - 0x030, 0x0000A237, - 0x030, 0x0000B237, - 0x030, 0x0000C237, - 0x030, 0x0000D237, - 0x030, 0x0000E207, - 0x030, 0x0000F237, - 0x030, 0x00010237, - 0x030, 0x00011237, - 0x030, 0x00012207, - 0x030, 0x00013237, - 0x030, 0x00014237, - 0x030, 0x00015237, - 0x030, 0x00016207, - 0x030, 0x00017237, - 0x030, 0x00018207, - 0x030, 0x00019237, - 0xA0000000, 0x00000000, - 0x030, 0x00000233, - 0x030, 0x00001233, - 0x030, 0x00002233, - 0x030, 0x00003233, - 0x030, 0x00004203, - 0x030, 0x00005233, - 0x030, 0x00006233, - 0x030, 0x00007233, - 0x030, 0x00008203, - 0x030, 0x00009233, - 0x030, 0x0000A233, - 0x030, 0x0000B233, - 0x030, 0x0000C233, - 0x030, 0x0000D233, - 0x030, 0x0000E203, - 0x030, 0x0000F233, - 0x030, 0x00010233, - 0x030, 0x00011233, - 0x030, 0x00012203, - 0x030, 0x00013233, - 0x030, 0x00014233, - 0x030, 0x00015233, - 0x030, 0x00016203, - 0x030, 0x00017233, - 0x030, 0x00018203, - 0x030, 0x00019233, - 0xB0000000, 0x00000000, - 0x0EF, 0x00000000, - 0x0EF, 0x00000080, - 0x030, 0x00000232, - 0x030, 0x00001232, - 0x030, 0x00002232, - 0x030, 0x00003232, - 0x030, 0x00004232, - 0x030, 0x00005232, - 0x030, 0x00006232, - 0x030, 0x00007232, - 0x030, 0x00008232, - 0x030, 0x00009232, - 0x030, 0x0000A232, - 0x030, 0x0000B232, - 0x0EF, 0x00000000, - 0x0EF, 0x00000040, - 0x030, 0x00000770, - 0x030, 0x00001770, - 0x030, 0x00002440, - 0x030, 0x00003440, - 0x030, 0x00004330, - 0x030, 0x00005330, - 0x030, 0x00008770, - 0x030, 0x0000A440, - 0x030, 0x0000C330, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x0EF, 0x00000000, - 0x0EE, 0x00010000, - 0x033, 0x00000200, - 0x03F, 0x0000006A, - 0x033, 0x00000201, - 0x03F, 0x0000006D, - 0x033, 0x00000202, - 0x03F, 0x0000046A, - 0x033, 0x00000203, - 0x03F, 0x0000086A, - 0x033, 0x00000204, - 0x03F, 0x00000C89, - 0x033, 0x00000205, - 0x03F, 0x00000CE8, - 0x033, 0x00000206, - 0x03F, 0x00000CEB, - 0x033, 0x00000207, - 0x03F, 0x00000CEE, - 0x033, 0x00000208, - 0x03F, 0x00000CF1, - 0x033, 0x00000209, - 0x03F, 0x00000CF4, - 0x033, 0x0000020A, - 0x03F, 0x00000CF7, - 0x033, 0x00000280, - 0x03F, 0x0000006A, - 0x033, 0x00000281, - 0x03F, 0x0000006D, - 0x033, 0x00000282, - 0x03F, 0x0000046A, - 0x033, 0x00000283, - 0x03F, 0x0000086A, - 0x033, 0x00000284, - 0x03F, 0x00000C89, - 0x033, 0x00000285, - 0x03F, 0x00000CE8, - 0x033, 0x00000286, - 0x03F, 0x00000CEB, - 0x033, 0x00000287, - 0x03F, 0x00000CEE, - 0x033, 0x00000288, - 0x03F, 0x00000CF1, - 0x033, 0x00000289, - 0x03F, 0x00000CF4, - 0x033, 0x0000028A, - 0x03F, 0x00000CF7, - 0x033, 0x00000300, - 0x03F, 0x0000006A, - 0x033, 0x00000301, - 0x03F, 0x0000006D, - 0x033, 0x00000302, - 0x03F, 0x0000046A, - 0x033, 0x00000303, - 0x03F, 0x0000086A, - 0x033, 0x00000304, - 0x03F, 0x00000C89, - 0x033, 0x00000305, - 0x03F, 0x00000CE8, - 0x033, 0x00000306, - 0x03F, 0x00000CEB, - 0x033, 0x00000307, - 0x03F, 0x00000CEE, - 0x033, 0x00000308, - 0x03F, 0x00000CF1, - 0x033, 0x00000309, - 0x03F, 0x00000CF4, - 0x033, 0x0000030A, - 0x03F, 0x00000CF7, - 0x0EE, 0x00000000, - 0x051, 0x0003C800, - 0x052, 0x000942CA, - 0x053, 0x000090F9, - 0x054, 0x00088000, - 0x057, 0x0004C80A, - 0x0EF, 0x00000020, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, 0x033, 0x00000000, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000001, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x00000002, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x00000003, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x00000004, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x00000005, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x00000006, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x00020000, 0x033, 0x00000007, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, 0x033, 0x00000008, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000009, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x0000000A, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x0000000B, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x0000000C, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x0000000D, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x0000000E, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x00010E46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x00020000, 0x033, 0x0000000F, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, 0x033, 0x00000010, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000011, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, - 0x033, 0x00000012, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x00000013, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x00000014, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x00000015, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x00000016, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x00020000, 0x033, 0x00000017, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x033, 0x00000018, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000019, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x0000001A, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x0000001B, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x0000001C, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x0000001D, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x0000001E, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x00020000, 0x033, 0x0000001F, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x033, 0x00000020, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000021, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x00000022, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x00000023, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x00000024, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x00000025, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x00000026, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, - 0x033, 0x00000027, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, - 0x033, 0x00000028, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, - 0x033, 0x00000029, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, - 0x033, 0x0000002A, - 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x03F, 0x0000EA46, - 0xA0000000, 0x00000000, - 0x03F, 0x00002A46, - 0xB0000000, 0x00000000, - 0x0EF, 0x00000000, - 0x0EE, 0x00010000, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, - 0x033, 0x00000060, - 0x03F, 0x00000487, - 0x033, 0x00000061, - 0x03F, 0x00000887, - 0x033, 0x00000062, - 0x03F, 0x00000947, - 0x033, 0x00000063, - 0x03F, 0x00000D48, - 0x033, 0x00000064, - 0x03F, 0x00000DE5, - 0x033, 0x00000065, - 0x03F, 0x00000DE8, - 0x033, 0x00000066, - 0x03F, 0x00000DEB, - 0x033, 0x00000067, - 0x03F, 0x00000DEE, - 0x033, 0x00000068, - 0x03F, 0x00000DF1, - 0x033, 0x00000069, - 0x03F, 0x00000DF4, - 0x033, 0x0000006A, - 0x03F, 0x00000DF7, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, - 0x033, 0x00000060, - 0x03F, 0x00000487, - 0x033, 0x00000061, - 0x03F, 0x00000887, - 0x033, 0x00000062, - 0x03F, 0x00000947, - 0x033, 0x00000063, - 0x03F, 0x00000D48, - 0x033, 0x00000064, - 0x03F, 0x00000DE5, - 0x033, 0x00000065, - 0x03F, 0x00000DE8, - 0x033, 0x00000066, - 0x03F, 0x00000DEB, - 0x033, 0x00000067, - 0x03F, 0x00000DEE, - 0x033, 0x00000068, - 0x03F, 0x00000DF1, - 0x033, 0x00000069, - 0x03F, 0x00000DF4, - 0x033, 0x0000006A, - 0x03F, 0x00000DF7, - 0xA0000000, 0x00000000, - 0x033, 0x00000060, - 0x03F, 0x00000487, - 0x033, 0x00000061, - 0x03F, 0x00000887, - 0x033, 0x00000062, - 0x03F, 0x00000947, - 0x033, 0x00000063, - 0x03F, 0x00000D48, - 0x033, 0x00000064, - 0x03F, 0x00000D88, - 0x033, 0x00000065, - 0x03F, 0x00000DE8, - 0x033, 0x00000066, - 0x03F, 0x00000DEB, - 0x033, 0x00000067, - 0x03F, 0x00000DEE, - 0x033, 0x00000068, - 0x03F, 0x00000DF1, - 0x033, 0x00000069, - 0x03F, 0x00000DF4, - 0x033, 0x0000006A, - 0x03F, 0x00000DF7, - 0xB0000000, 0x00000000, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x033, 0x00000020, - 0x03F, 0x00000487, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000021, - 0x03F, 0x00000887, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x00000022, - 0x03F, 0x00000947, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x00000023, - 0x03F, 0x00000D48, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x00000024, - 0x03F, 0x00000DE5, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x00000025, - 0x03F, 0x00000DE8, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x00000026, - 0x03F, 0x00000DEB, + 0x03E, 0x00000000, + 0x03F, 0x00020000, 0x033, 0x00000027, - 0x03F, 0x00000DEE, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x033, 0x00000028, - 0x03F, 0x00000DF1, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000029, - 0x03F, 0x00000DF4, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x0000002A, - 0x03F, 0x00000DF7, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x033, 0x00000020, - 0x03F, 0x00000487, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000021, - 0x03F, 0x00000887, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x00000022, - 0x03F, 0x00000947, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x00000023, - 0x03F, 0x00000D48, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x00000024, - 0x03F, 0x00000DE5, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x00000025, - 0x03F, 0x00000DE8, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x00000026, - 0x03F, 0x00000DEB, + 0x03E, 0x00000000, + 0x03F, 0x00020000, 0x033, 0x00000027, - 0x03F, 0x00000DEE, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x033, 0x00000028, - 0x03F, 0x00000DF1, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000029, - 0x03F, 0x00000DF4, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x0000002A, - 0x03F, 0x00000DF7, - 0xA0000000, 0x00000000, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, + 0x033, 0x00000000, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000001, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000002, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000003, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000004, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000005, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000006, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000007, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000008, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000009, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000000A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000000B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000000C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000000D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x033, 0x00000020, - 0x03F, 0x00000487, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000021, - 0x03F, 0x00000887, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x00000022, - 0x03F, 0x00000947, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x00000023, - 0x03F, 0x00000D48, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x00000024, - 0x03F, 0x00000D88, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x00000025, - 0x03F, 0x00000DE8, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x00000026, - 0x03F, 0x00000DEB, + 0x03E, 0x00000000, + 0x03F, 0x00020000, 0x033, 0x00000027, - 0x03F, 0x00000DEE, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x033, 0x00000028, - 0x03F, 0x00000DF1, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000029, - 0x03F, 0x00000DF4, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x0000002A, - 0x03F, 0x00000DF7, - 0xB0000000, 0x00000000, - 0x0EE, 0x00000000, - 0x05C, 0x000FCC00, - 0x067, 0x0000A505, - 0x0D3, 0x00000542, - 0x043, 0x00005000, - 0x07F, 0x00000000, - 0x0B0, 0x0001F0FC, - 0x0B1, 0x0007DBE4, - 0x0B2, 0x00022400, - 0x0B3, 0x0007C760, - 0x0B4, 0x00099D40, - 0x0B5, 0x0004103F, - 0x0B6, 0x000187F8, - 0x0B7, 0x00030018, - 0x0BC, 0x00000008, - 0x0D3, 0x00000542, - 0x0DD, 0x00000500, - 0x0BB, 0x00040010, - 0x0B0, 0x0001F0FA, - 0x0FE, 0x00000000, - 0x0CA, 0x00080000, - 0x0CA, 0x00080001, - 0x0FE, 0x00000000, - 0x0B0, 0x0001F0F8, - 0x0B3, 0x0007C700, - 0x018, 0x0001B124, - 0xFFE, 0x00000000, - 0xFFE, 0x00000000, - 0x0B3, 0x0007C760, - 0x018, 0x00013124, - 0x0CC, 0x0000F000, - 0x0CD, 0x00089600, - 0x0CC, 0x0004F000, - 0x018, 0x00013108, - 0x0FE, 0x00000000, - 0x0B8, 0x000C0440, - 0x0BA, 0x000E840D, - 0x0FE, 0x00000000, - 0x018, 0x00013124, - 0x059, 0x000A0000, - 0x05A, 0x00060000, - 0x05B, 0x00014000, - 0x0ED, 0x00000008, - 0x033, 0x00000001, - 0x03F, 0x0000000F, - 0x0ED, 0x00000000, - 0x0EE, 0x00000002, - 0x033, 0x00000017, - 0x03F, 0x0000003F, - 0x033, 0x00000018, - 0x03F, 0x0000003F, - 0x033, 0x00000019, - 0x03F, 0x00000000, - 0x033, 0x0000001A, - 0x03F, 0x0000003F, - 0x033, 0x0000001B, - 0x03F, 0x0000003F, - 0x033, 0x0000001C, - 0x03F, 0x0000003F, - 0x0EE, 0x00000000, - 0x0EE, 0x00000004, - 0x033, 0x0000000A, - 0x03F, 0x00000010, - 0x0EE, 0x00000000, - 0x0ED, 0x00000200, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x0EF, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x0EF, 0x00020000, 0x033, 0x00000000, - 0x03F, 0x000F45A4, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000001, - 0x03F, 0x000F49A4, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x00000002, - 0x03F, 0x000F49A4, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x00000003, - 0x03F, 0x000F69A4, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x00000004, - 0x03F, 0x000F69A4, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x00000005, - 0x03F, 0x000F69A4, + 0x03E, 0x00000002, + 0x03F, 0x00020000, 0x033, 0x00000006, - 0x03F, 0x000F6DA4, + 0x03E, 0x00000000, + 0x03F, 0x00020000, 0x033, 0x00000007, - 0x03F, 0x000F6DA4, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, 0x033, 0x00000008, - 0x03F, 0x000F6DA4, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, 0x033, 0x00000009, - 0x03F, 0x000F8DA4, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, 0x033, 0x0000000A, - 0x03F, 0x000F8DA4, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, 0x033, 0x0000000B, - 0x03F, 0x000F8DA4, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, 0x033, 0x0000000C, - 0x03F, 0x000F91A4, - 0x033, 0x0000000D, - 0x03F, 0x000F91A4, - 0x033, 0x0000000E, - 0x03F, 0x000F91A4, - 0x033, 0x0000000F, - 0x03F, 0x000FB1A4, - 0x033, 0x00000010, - 0x03F, 0x000FB1A4, - 0x033, 0x00000011, - 0x03F, 0x000FB1A4, - 0x033, 0x00000012, - 0x03F, 0x000FB5A4, - 0x033, 0x00000013, - 0x03F, 0x000FB5A4, - 0x033, 0x00000014, - 0x03F, 0x000FD9A4, - 0x033, 0x00000015, - 0x03F, 0x000FD9A4, - 0x033, 0x00000016, - 0x03F, 0x000FF9A4, - 0x033, 0x00000017, - 0x03F, 0x000FF9A4, - 0x033, 0x00000018, - 0x03F, 0x000FFDA4, - 0x033, 0x00000019, - 0x03F, 0x000FFDA4, - 0x033, 0x0000001A, - 0x03F, 0x000FFDA4, - 0x0ED, 0x00000000, - 0xFFFF, 0x0000FFFF, -}; - -RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_a, A); - -static const u32 rtw8822c_rf_b[] = { - 0x000, 0x00030000, - 0x018, 0x00013124, - 0x0EF, 0x00080000, - 0x033, 0x00000001, - 0x03F, 0x00091020, - 0x0EF, 0x00000000, - 0x0DE, 0x00000020, - 0x08E, 0x000A5540, - 0x081, 0x0000FC01, - 0x081, 0x0002FC01, - 0x081, 0x0003FC01, - 0x085, 0x0006A06C, - 0x0EE, 0x00000010, - 0x033, 0x00000001, - 0x03F, 0x0000003F, - 0x033, 0x00000001, - 0x03F, 0x0000003F, - 0x033, 0x00000002, - 0x03F, 0x0000003F, - 0x0EE, 0x00000000, - 0x0EF, 0x00010000, - 0x033, 0x0000000F, - 0x03F, 0x000773E8, - 0x033, 0x0000000E, - 0x03F, 0x000FF3A0, + 0x03E, 0x00000086, + 0x03F, 0x00020000, 0x033, 0x0000000D, - 0x03F, 0x00000380, - 0x033, 0x0000000C, - 0x03F, 0x000FF380, - 0x033, 0x0000000B, - 0x03F, 0x00000300, - 0x033, 0x0000000A, - 0x03F, 0x000002A8, - 0x033, 0x00000009, - 0x03F, 0x00000280, - 0x033, 0x00000008, - 0x03F, 0x000FF280, - 0x033, 0x00000007, - 0x03F, 0x00000200, - 0x033, 0x00000006, - 0x03F, 0x000001C0, - 0x033, 0x00000005, - 0x03F, 0x00000180, - 0x033, 0x00000004, - 0x03F, 0x00000040, - 0x033, 0x00000003, - 0x03F, 0x00000000, - 0x033, 0x0000001F, - 0x03F, 0x000773E8, - 0x033, 0x0000001E, - 0x03F, 0x000FF3A0, - 0x033, 0x0000001D, - 0x03F, 0x00000380, - 0x033, 0x0000001C, - 0x03F, 0x000FF380, - 0x033, 0x0000001B, - 0x03F, 0x00000300, - 0x033, 0x0000001A, - 0x03F, 0x000002A8, - 0x033, 0x00000019, - 0x03F, 0x00000280, - 0x033, 0x00000018, - 0x03F, 0x000FF280, - 0x033, 0x00000017, - 0x03F, 0x00000200, - 0x033, 0x00000016, - 0x03F, 0x000001C0, - 0x033, 0x00000015, - 0x03F, 0x00000180, - 0x033, 0x00000014, - 0x03F, 0x00000040, - 0x033, 0x00000013, - 0x03F, 0x00000000, - 0x033, 0x0000002F, - 0x03F, 0x000773E8, - 0x033, 0x0000002E, - 0x03F, 0x000FF3A0, - 0x033, 0x0000002D, - 0x03F, 0x00000380, - 0x033, 0x0000002C, - 0x03F, 0x000FF380, - 0x033, 0x0000002B, - 0x03F, 0x00000300, - 0x033, 0x0000002A, - 0x03F, 0x000002A8, - 0x033, 0x00000029, - 0x03F, 0x00000280, - 0x033, 0x00000028, - 0x03F, 0x000FF280, - 0x033, 0x00000027, - 0x03F, 0x00000200, - 0x033, 0x00000026, - 0x03F, 0x000001C0, - 0x033, 0x00000025, - 0x03F, 0x00000180, - 0x033, 0x00000024, - 0x03F, 0x00000040, - 0x033, 0x00000023, - 0x03F, 0x00000000, - 0x033, 0x0000003F, - 0x03F, 0x000773E8, - 0x033, 0x0000003E, - 0x03F, 0x000FF3A0, - 0x033, 0x0000003D, - 0x03F, 0x00000380, - 0x033, 0x0000003C, - 0x03F, 0x000FF380, - 0x033, 0x0000003B, - 0x03F, 0x00000300, - 0x033, 0x0000003A, - 0x03F, 0x000002A8, - 0x033, 0x00000039, - 0x03F, 0x00000280, - 0x033, 0x00000038, - 0x03F, 0x000FF280, - 0x033, 0x00000037, - 0x03F, 0x00000200, - 0x033, 0x00000036, - 0x03F, 0x000001C0, - 0x033, 0x00000035, - 0x03F, 0x00000180, - 0x033, 0x00000034, - 0x03F, 0x00000040, - 0x033, 0x00000033, - 0x03F, 0x00000000, - 0x033, 0x0000004F, - 0x03F, 0x000773E8, - 0x033, 0x0000004E, - 0x03F, 0x000FF3A0, - 0x033, 0x0000004D, - 0x03F, 0x00000380, - 0x033, 0x0000004C, - 0x03F, 0x000FF380, - 0x033, 0x0000004B, - 0x03F, 0x00000300, - 0x033, 0x0000004A, - 0x03F, 0x000002A8, - 0x033, 0x00000049, - 0x03F, 0x00000280, - 0x033, 0x00000048, - 0x03F, 0x000FF280, - 0x033, 0x00000047, - 0x03F, 0x00000200, - 0x033, 0x00000046, - 0x03F, 0x000001C0, - 0x033, 0x00000045, - 0x03F, 0x00000180, - 0x033, 0x00000044, - 0x03F, 0x00000040, - 0x033, 0x00000043, - 0x03F, 0x00000000, - 0x033, 0x0000005F, - 0x03F, 0x000773E8, - 0x033, 0x0000005E, - 0x03F, 0x000FF3A0, - 0x033, 0x0000005D, - 0x03F, 0x00000380, - 0x033, 0x0000005C, - 0x03F, 0x000FF380, - 0x033, 0x0000005B, - 0x03F, 0x00000300, - 0x033, 0x0000005A, - 0x03F, 0x000002A8, - 0x033, 0x00000059, - 0x03F, 0x00000280, - 0x033, 0x00000058, - 0x03F, 0x000FF280, - 0x033, 0x00000057, - 0x03F, 0x00000200, - 0x033, 0x00000056, - 0x03F, 0x000001C0, - 0x033, 0x00000055, - 0x03F, 0x00000180, - 0x033, 0x00000054, - 0x03F, 0x00000040, - 0x033, 0x00000053, - 0x03F, 0x00000000, - 0x0EF, 0x00000000, - 0x08A, 0x000E7DE3, - 0x08B, 0x0008FE00, - 0x0EE, 0x00000008, - 0x033, 0x00000000, - 0x03F, 0x00000023, - 0x033, 0x00000001, - 0x03F, 0x00000023, - 0x0EE, 0x00000000, - 0x0EF, 0x00004000, - 0x033, 0x00000000, - 0x03F, 0x0000000F, - 0x033, 0x00000002, - 0x03F, 0x00000000, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000000E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000000F, + 0x03E, 0x00000000, + 0x03F, 0x0002F81C, + 0x033, 0x00000010, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000011, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000012, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000013, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000014, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000015, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000016, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000017, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000018, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000019, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000001A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000001B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000001C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000001D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000001E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000001F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000020, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000021, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x00000022, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x00000023, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x00000024, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x00000025, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x00000026, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x00000027, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, + 0x033, 0x00000028, + 0x03E, 0x00001C86, + 0x03F, 0x00020000, + 0x033, 0x00000029, + 0x03E, 0x00001C02, + 0x03F, 0x00020000, + 0x033, 0x0000002A, + 0x03E, 0x00000F02, + 0x03F, 0x00020000, + 0x033, 0x0000002B, + 0x03E, 0x00000F00, + 0x03F, 0x00020000, + 0x033, 0x0000002C, + 0x03E, 0x00000086, + 0x03F, 0x00020000, + 0x033, 0x0000002D, + 0x03E, 0x00000002, + 0x03F, 0x00020000, + 0x033, 0x0000002E, + 0x03E, 0x00000000, + 0x03F, 0x00020000, + 0x033, 0x0000002F, + 0x03E, 0x00000000, + 0x03F, 0x0002C010, 0x0EF, 0x00000000, + 0xA0000000, 0x00000000, 0x0EF, 0x00020000, 0x033, 0x00000000, 0x03E, 0x00001910, @@ -3201,11 +7904,55 @@ static const u32 rtw8822c_rf_b[] = { 0x03E, 0x00000000, 0x03F, 0x0002C010, 0x0EF, 0x00000000, + 0xB0000000, 0x00000000, + 0x0FE, 0x00000000, + 0x01B, 0x00003A40, 0x061, 0x0000D233, 0x062, 0x0004D232, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x063, 0x00000002, + 0xA0000000, 0x00000000, 0x063, 0x00000C02, + 0xB0000000, 0x00000000, 0x0EF, 0x00000200, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x030, 0x00000237, 0x030, 0x00001237, 0x030, 0x00002237, @@ -3232,7 +7979,88 @@ static const u32 rtw8822c_rf_b[] = { 0x030, 0x00017237, 0x030, 0x00018207, 0x030, 0x00019237, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000237, + 0x030, 0x00001237, + 0x030, 0x00002237, + 0x030, 0x00003237, + 0x030, 0x00004207, + 0x030, 0x00005237, + 0x030, 0x00006237, + 0x030, 0x00007237, + 0x030, 0x00008207, + 0x030, 0x00009237, + 0x030, 0x0000A237, + 0x030, 0x0000B237, + 0x030, 0x0000C237, + 0x030, 0x0000D237, + 0x030, 0x0000E207, + 0x030, 0x0000F237, + 0x030, 0x00010237, + 0x030, 0x00011237, + 0x030, 0x00012207, + 0x030, 0x00013237, + 0x030, 0x00014237, + 0x030, 0x00015237, + 0x030, 0x00016207, + 0x030, 0x00017237, + 0x030, 0x00018207, + 0x030, 0x00019237, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x030, 0x00000237, 0x030, 0x00001237, 0x030, 0x00002237, @@ -3289,6 +8117,85 @@ static const u32 rtw8822c_rf_b[] = { 0xB0000000, 0x00000000, 0x0EF, 0x00000000, 0x0EF, 0x00000080, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x030, 0x00000334, + 0x030, 0x00001334, + 0x030, 0x00002334, + 0x030, 0x00003334, + 0x030, 0x00004334, + 0x030, 0x00005334, + 0x030, 0x00006334, + 0x030, 0x00007334, + 0x030, 0x00008334, + 0x030, 0x00009334, + 0x030, 0x0000A334, + 0x030, 0x0000B334, + 0xA0000000, 0x00000000, 0x030, 0x00000232, 0x030, 0x00001232, 0x030, 0x00002232, @@ -3301,6 +8208,7 @@ static const u32 rtw8822c_rf_b[] = { 0x030, 0x00009232, 0x030, 0x0000A232, 0x030, 0x0000B232, + 0xB0000000, 0x00000000, 0x0EF, 0x00000000, 0x0EF, 0x00000040, 0x030, 0x00000770, @@ -3382,413 +8290,771 @@ static const u32 rtw8822c_rf_b[] = { 0x03F, 0x00000CF7, 0x0EE, 0x00000000, 0x051, 0x0003C800, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x052, 0x000902CA, + 0xA0000000, 0x00000000, 0x052, 0x000942C0, + 0xB0000000, 0x00000000, 0x053, 0x000090F9, 0x054, 0x00088000, 0x057, 0x0004C80A, 0x0EF, 0x00000020, 0x033, 0x00000000, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000001, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000002, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000003, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000004, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000005, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000006, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000007, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000008, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, 0xA0000000, 0x00000000, 0x03F, 0x0000C246, 0xB0000000, 0x00000000, 0x033, 0x00000009, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000000A, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000000B, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000000C, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000000D, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000000E, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000000F, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000010, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000011, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x00024246, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x00024246, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002C246, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000012, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000013, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000014, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000015, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000016, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000017, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000018, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000019, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000001A, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000001B, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000001C, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000001D, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000001E, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000001F, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000020, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000021, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000022, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000023, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000024, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000025, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000026, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000027, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000028, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x00000029, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0002CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x033, 0x0000002A, 0x03E, 0x00000020, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x03F, 0x0001CA46, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, 0x03F, 0x0001CA46, 0xA0000000, 0x00000000, 0x03F, 0x00008E46, 0xB0000000, 0x00000000, 0x0EF, 0x00000000, 0x0EE, 0x00010000, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x033, 0x00000060, - 0x03F, 0x00000487, + 0x03F, 0x00000468, 0x033, 0x00000061, - 0x03F, 0x00000887, + 0x03F, 0x00000868, 0x033, 0x00000062, - 0x03F, 0x00000947, + 0x03F, 0x00000909, 0x033, 0x00000063, - 0x03F, 0x00000D48, + 0x03F, 0x00000D0A, 0x033, 0x00000064, - 0x03F, 0x00000DE5, + 0x03F, 0x00000D4A, 0x033, 0x00000065, - 0x03F, 0x00000DE8, + 0x03F, 0x00000D8B, 0x033, 0x00000066, 0x03F, 0x00000DEB, 0x033, 0x00000067, @@ -3799,19 +9065,111 @@ static const u32 rtw8822c_rf_b[] = { 0x03F, 0x00000DF4, 0x033, 0x0000006A, 0x03F, 0x00000DF7, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x033, 0x00000060, - 0x03F, 0x00000487, + 0x03F, 0x00000468, 0x033, 0x00000061, - 0x03F, 0x00000887, + 0x03F, 0x00000868, 0x033, 0x00000062, - 0x03F, 0x00000947, + 0x03F, 0x00000909, 0x033, 0x00000063, - 0x03F, 0x00000D48, + 0x03F, 0x00000D0A, 0x033, 0x00000064, - 0x03F, 0x00000DE5, + 0x03F, 0x00000D4A, 0x033, 0x00000065, - 0x03F, 0x00000DE8, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, + 0x033, 0x00000066, + 0x03F, 0x00000DEB, + 0x033, 0x00000067, + 0x03F, 0x00000DEE, + 0x033, 0x00000068, + 0x03F, 0x00000DF1, + 0x033, 0x00000069, + 0x03F, 0x00000DF4, + 0x033, 0x0000006A, + 0x03F, 0x00000DF7, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000060, + 0x03F, 0x00000468, + 0x033, 0x00000061, + 0x03F, 0x00000868, + 0x033, 0x00000062, + 0x03F, 0x00000909, + 0x033, 0x00000063, + 0x03F, 0x00000D0A, + 0x033, 0x00000064, + 0x03F, 0x00000D4A, + 0x033, 0x00000065, + 0x03F, 0x00000D8B, 0x033, 0x00000066, 0x03F, 0x00000DEB, 0x033, 0x00000067, @@ -3846,19 +9204,19 @@ static const u32 rtw8822c_rf_b[] = { 0x033, 0x0000006A, 0x03F, 0x00000DF7, 0xB0000000, 0x00000000, - 0x81000000, 0x00000000, 0x40000000, 0x00000000, + 0x81000001, 0x00000000, 0x40000000, 0x00000000, 0x033, 0x00000020, - 0x03F, 0x00000487, + 0x03F, 0x00000468, 0x033, 0x00000021, - 0x03F, 0x00000887, + 0x03F, 0x00000868, 0x033, 0x00000022, - 0x03F, 0x00000947, + 0x03F, 0x00000909, 0x033, 0x00000023, - 0x03F, 0x00000D48, + 0x03F, 0x00000D0A, 0x033, 0x00000024, - 0x03F, 0x00000DE5, + 0x03F, 0x00000D4A, 0x033, 0x00000025, - 0x03F, 0x00000DE8, + 0x03F, 0x00000D8B, 0x033, 0x00000026, 0x03F, 0x00000DEB, 0x033, 0x00000027, @@ -3869,19 +9227,111 @@ static const u32 rtw8822c_rf_b[] = { 0x03F, 0x00000DF4, 0x033, 0x0000002A, 0x03F, 0x00000DF7, - 0x91000001, 0x00000000, 0x40000000, 0x00000000, + 0x91000002, 0x00000000, 0x40000000, 0x00000000, 0x033, 0x00000020, - 0x03F, 0x00000487, + 0x03F, 0x00000468, 0x033, 0x00000021, - 0x03F, 0x00000887, + 0x03F, 0x00000868, 0x033, 0x00000022, - 0x03F, 0x00000947, + 0x03F, 0x00000909, 0x033, 0x00000023, - 0x03F, 0x00000D48, + 0x03F, 0x00000D0A, 0x033, 0x00000024, - 0x03F, 0x00000DE5, + 0x03F, 0x00000D4A, 0x033, 0x00000025, - 0x03F, 0x00000DE8, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x92000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x92000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x93000001, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, + 0x033, 0x00000026, + 0x03F, 0x00000DEB, + 0x033, 0x00000027, + 0x03F, 0x00000DEE, + 0x033, 0x00000028, + 0x03F, 0x00000DF1, + 0x033, 0x00000029, + 0x03F, 0x00000DF4, + 0x033, 0x0000002A, + 0x03F, 0x00000DF7, + 0x93000002, 0x00000000, 0x40000000, 0x00000000, + 0x033, 0x00000020, + 0x03F, 0x00000468, + 0x033, 0x00000021, + 0x03F, 0x00000868, + 0x033, 0x00000022, + 0x03F, 0x00000909, + 0x033, 0x00000023, + 0x03F, 0x00000D0A, + 0x033, 0x00000024, + 0x03F, 0x00000D4A, + 0x033, 0x00000025, + 0x03F, 0x00000D8B, 0x033, 0x00000026, 0x03F, 0x00000DEB, 0x033, 0x00000027, @@ -3921,11 +9371,10 @@ static const u32 rtw8822c_rf_b[] = { 0x067, 0x0000A505, 0x0D3, 0x00000542, 0x043, 0x00005000, - 0x0CD, 0x00089600, 0x059, 0x000A0000, 0x05A, 0x00060000, 0x05B, 0x00014000, - 0x001, 0x00040023, + 0x001, 0x00040000, 0x0EE, 0x00000002, 0x033, 0x00000017, 0x03F, 0x0000003F, @@ -3940,211 +9389,2365 @@ static const u32 rtw8822c_rf_b[] = { 0x033, 0x0000001C, 0x03F, 0x0000003F, 0x0EE, 0x00000000, - 0x0EE, 0x00000004, - 0x033, 0x0000000A, - 0x03F, 0x00000010, - 0x0EE, 0x00000000, - 0xFFFF, 0x0000FFFF, + 0x092, 0x00084800, + 0x092, 0x00084801, + 0x0FE, 0x00000000, + 0x0FE, 0x00000000, + 0x0FE, 0x00000000, + 0x0FE, 0x00000000, + 0x092, 0x00084800, + 0x08F, 0x0000182C, + 0x088, 0x0004326B, + 0x019, 0x00000005, }; RTW_DECL_TABLE_RF_RADIO(rtw8822c_rf_b, B); static const u8 rtw8822c_txpwr_lmt_type0[] = { - 0, 0, 0, 0, 1, 64, 2, 0, 0, 0, 1, 56, 1, 0, 0, 0, 1, 60, - 0, 0, 0, 0, 2, 64, 2, 0, 0, 0, 2, 56, 1, 0, 0, 0, 2, 60, - 0, 0, 0, 0, 3, 64, 2, 0, 0, 0, 3, 56, 1, 0, 0, 0, 3, 60, - 0, 0, 0, 0, 4, 64, 2, 0, 0, 0, 4, 56, 1, 0, 0, 0, 4, 60, - 0, 0, 0, 0, 5, 64, 2, 0, 0, 0, 5, 56, 1, 0, 0, 0, 5, 60, - 0, 0, 0, 0, 6, 64, 2, 0, 0, 0, 6, 56, 1, 0, 0, 0, 6, 60, - 0, 0, 0, 0, 7, 64, 2, 0, 0, 0, 7, 56, 1, 0, 0, 0, 7, 60, - 0, 0, 0, 0, 8, 64, 2, 0, 0, 0, 8, 56, 1, 0, 0, 0, 8, 60, - 0, 0, 0, 0, 9, 64, 2, 0, 0, 0, 9, 56, 1, 0, 0, 0, 9, 60, - 0, 0, 0, 0, 10, 64, 2, 0, 0, 0, 10, 56, 1, 0, 0, 0, 10, 60, - 0, 0, 0, 0, 11, 64, 2, 0, 0, 0, 11, 56, 1, 0, 0, 0, 11, 60, - 0, 0, 0, 0, 12, 52, 2, 0, 0, 0, 12, 56, 1, 0, 0, 0, 12, 60, - 0, 0, 0, 0, 13, 40, 2, 0, 0, 0, 13, 56, 1, 0, 0, 0, 13, 56, - 0, 0, 0, 0, 14, 127, 2, 0, 0, 0, 14, 127, 1, 0, 0, 0, 14, 64, - 0, 0, 0, 1, 1, 52, 2, 0, 0, 1, 1, 60, 1, 0, 0, 1, 1, 68, - 0, 0, 0, 1, 2, 60, 2, 0, 0, 1, 2, 60, 1, 0, 0, 1, 2, 68, - 0, 0, 0, 1, 3, 64, 2, 0, 0, 1, 3, 60, 1, 0, 0, 1, 3, 68, - 0, 0, 0, 1, 4, 68, 2, 0, 0, 1, 4, 60, 1, 0, 0, 1, 4, 68, - 0, 0, 0, 1, 5, 68, 2, 0, 0, 1, 5, 60, 1, 0, 0, 1, 5, 68, - 0, 0, 0, 1, 6, 68, 2, 0, 0, 1, 6, 60, 1, 0, 0, 1, 6, 68, - 0, 0, 0, 1, 7, 68, 2, 0, 0, 1, 7, 60, 1, 0, 0, 1, 7, 68, - 0, 0, 0, 1, 8, 68, 2, 0, 0, 1, 8, 60, 1, 0, 0, 1, 8, 68, - 0, 0, 0, 1, 9, 64, 2, 0, 0, 1, 9, 60, 1, 0, 0, 1, 9, 68, - 0, 0, 0, 1, 10, 60, 2, 0, 0, 1, 10, 60, 1, 0, 0, 1, 10, 68, - 0, 0, 0, 1, 11, 56, 2, 0, 0, 1, 11, 60, 1, 0, 0, 1, 11, 68, - 0, 0, 0, 1, 12, 44, 2, 0, 0, 1, 12, 60, 1, 0, 0, 1, 12, 68, - 0, 0, 0, 1, 13, 28, 2, 0, 0, 1, 13, 60, 1, 0, 0, 1, 13, 68, - 0, 0, 0, 1, 14, 127, 2, 0, 0, 1, 14, 127, 1, 0, 0, 1, 14, 127, - 0, 0, 0, 2, 1, 52, 2, 0, 0, 2, 1, 60, 1, 0, 0, 2, 1, 68, - 0, 0, 0, 2, 2, 60, 2, 0, 0, 2, 2, 60, 1, 0, 0, 2, 2, 68, - 0, 0, 0, 2, 3, 64, 2, 0, 0, 2, 3, 60, 1, 0, 0, 2, 3, 68, - 0, 0, 0, 2, 4, 68, 2, 0, 0, 2, 4, 60, 1, 0, 0, 2, 4, 68, - 0, 0, 0, 2, 5, 68, 2, 0, 0, 2, 5, 60, 1, 0, 0, 2, 5, 68, - 0, 0, 0, 2, 6, 68, 2, 0, 0, 2, 6, 60, 1, 0, 0, 2, 6, 68, - 0, 0, 0, 2, 7, 68, 2, 0, 0, 2, 7, 60, 1, 0, 0, 2, 7, 68, - 0, 0, 0, 2, 8, 68, 2, 0, 0, 2, 8, 60, 1, 0, 0, 2, 8, 68, - 0, 0, 0, 2, 9, 64, 2, 0, 0, 2, 9, 60, 1, 0, 0, 2, 9, 68, - 0, 0, 0, 2, 10, 60, 2, 0, 0, 2, 10, 60, 1, 0, 0, 2, 10, 68, - 0, 0, 0, 2, 11, 52, 2, 0, 0, 2, 11, 60, 1, 0, 0, 2, 11, 68, - 0, 0, 0, 2, 12, 40, 2, 0, 0, 2, 12, 60, 1, 0, 0, 2, 12, 68, - 0, 0, 0, 2, 13, 28, 2, 0, 0, 2, 13, 60, 1, 0, 0, 2, 13, 68, - 0, 0, 0, 2, 14, 127, 2, 0, 0, 2, 14, 127, 1, 0, 0, 2, 14, 127, - 0, 0, 0, 3, 1, 52, 2, 0, 0, 3, 1, 36, 1, 0, 0, 3, 1, 60, - 0, 0, 0, 3, 2, 56, 2, 0, 0, 3, 2, 36, 1, 0, 0, 3, 2, 60, - 0, 0, 0, 3, 3, 60, 2, 0, 0, 3, 3, 36, 1, 0, 0, 3, 3, 60, - 0, 0, 0, 3, 4, 60, 2, 0, 0, 3, 4, 36, 1, 0, 0, 3, 4, 60, - 0, 0, 0, 3, 5, 64, 2, 0, 0, 3, 5, 36, 1, 0, 0, 3, 5, 60, - 0, 0, 0, 3, 6, 64, 2, 0, 0, 3, 6, 36, 1, 0, 0, 3, 6, 60, - 0, 0, 0, 3, 7, 64, 2, 0, 0, 3, 7, 36, 1, 0, 0, 3, 7, 60, - 0, 0, 0, 3, 8, 60, 2, 0, 0, 3, 8, 36, 1, 0, 0, 3, 8, 60, - 0, 0, 0, 3, 9, 60, 2, 0, 0, 3, 9, 36, 1, 0, 0, 3, 9, 60, - 0, 0, 0, 3, 10, 56, 2, 0, 0, 3, 10, 36, 1, 0, 0, 3, 10, 60, - 0, 0, 0, 3, 11, 52, 2, 0, 0, 3, 11, 36, 1, 0, 0, 3, 11, 60, - 0, 0, 0, 3, 12, 40, 2, 0, 0, 3, 12, 36, 1, 0, 0, 3, 12, 60, - 0, 0, 0, 3, 13, 28, 2, 0, 0, 3, 13, 36, 1, 0, 0, 3, 13, 60, - 0, 0, 0, 3, 14, 127, 2, 0, 0, 3, 14, 127, 1, 0, 0, 3, 14, 127, - 0, 0, 1, 2, 1, 127, 2, 0, 1, 2, 1, 127, 1, 0, 1, 2, 1, 127, - 0, 0, 1, 2, 2, 127, 2, 0, 1, 2, 2, 127, 1, 0, 1, 2, 2, 127, - 0, 0, 1, 2, 3, 52, 2, 0, 1, 2, 3, 60, 1, 0, 1, 2, 3, 68, - 0, 0, 1, 2, 4, 52, 2, 0, 1, 2, 4, 60, 1, 0, 1, 2, 4, 68, - 0, 0, 1, 2, 5, 60, 2, 0, 1, 2, 5, 60, 1, 0, 1, 2, 5, 68, - 0, 0, 1, 2, 6, 64, 2, 0, 1, 2, 6, 60, 1, 0, 1, 2, 6, 68, - 0, 0, 1, 2, 7, 60, 2, 0, 1, 2, 7, 60, 1, 0, 1, 2, 7, 68, - 0, 0, 1, 2, 8, 52, 2, 0, 1, 2, 8, 60, 1, 0, 1, 2, 8, 68, - 0, 0, 1, 2, 9, 52, 2, 0, 1, 2, 9, 60, 1, 0, 1, 2, 9, 68, - 0, 0, 1, 2, 10, 40, 2, 0, 1, 2, 10, 60, 1, 0, 1, 2, 10, 68, - 0, 0, 1, 2, 11, 28, 2, 0, 1, 2, 11, 60, 1, 0, 1, 2, 11, 68, - 0, 0, 1, 2, 12, 127, 2, 0, 1, 2, 12, 127, 1, 0, 1, 2, 12, 127, - 0, 0, 1, 2, 13, 127, 2, 0, 1, 2, 13, 127, 1, 0, 1, 2, 13, 127, - 0, 0, 1, 2, 14, 127, 2, 0, 1, 2, 14, 127, 1, 0, 1, 2, 14, 127, - 0, 0, 1, 3, 1, 127, 2, 0, 1, 3, 1, 127, 1, 0, 1, 3, 1, 127, - 0, 0, 1, 3, 2, 127, 2, 0, 1, 3, 2, 127, 1, 0, 1, 3, 2, 127, - 0, 0, 1, 3, 3, 48, 2, 0, 1, 3, 3, 36, 1, 0, 1, 3, 3, 60, - 0, 0, 1, 3, 4, 48, 2, 0, 1, 3, 4, 36, 1, 0, 1, 3, 4, 60, - 0, 0, 1, 3, 5, 52, 2, 0, 1, 3, 5, 36, 1, 0, 1, 3, 5, 60, - 0, 0, 1, 3, 6, 56, 2, 0, 1, 3, 6, 36, 1, 0, 1, 3, 6, 60, - 0, 0, 1, 3, 7, 52, 2, 0, 1, 3, 7, 36, 1, 0, 1, 3, 7, 60, - 0, 0, 1, 3, 8, 52, 2, 0, 1, 3, 8, 36, 1, 0, 1, 3, 8, 60, - 0, 0, 1, 3, 9, 52, 2, 0, 1, 3, 9, 36, 1, 0, 1, 3, 9, 60, - 0, 0, 1, 3, 10, 40, 2, 0, 1, 3, 10, 36, 1, 0, 1, 3, 10, 60, - 0, 0, 1, 3, 11, 28, 2, 0, 1, 3, 11, 36, 1, 0, 1, 3, 11, 60, - 0, 0, 1, 3, 12, 127, 2, 0, 1, 3, 12, 127, 1, 0, 1, 3, 12, 127, - 0, 0, 1, 3, 13, 127, 2, 0, 1, 3, 13, 127, 1, 0, 1, 3, 13, 127, - 0, 0, 1, 3, 14, 127, 2, 0, 1, 3, 14, 127, 1, 0, 1, 3, 14, 127, - 0, 1, 0, 1, 36, 60, 2, 1, 0, 1, 36, 64, 1, 1, 0, 1, 36, 60, - 0, 1, 0, 1, 40, 64, 2, 1, 0, 1, 40, 64, 1, 1, 0, 1, 40, 60, - 0, 1, 0, 1, 44, 64, 2, 1, 0, 1, 44, 64, 1, 1, 0, 1, 44, 60, - 0, 1, 0, 1, 48, 64, 2, 1, 0, 1, 48, 64, 1, 1, 0, 1, 48, 60, - 0, 1, 0, 1, 52, 64, 2, 1, 0, 1, 52, 64, 1, 1, 0, 1, 52, 56, - 0, 1, 0, 1, 56, 64, 2, 1, 0, 1, 56, 64, 1, 1, 0, 1, 56, 56, - 0, 1, 0, 1, 60, 64, 2, 1, 0, 1, 60, 64, 1, 1, 0, 1, 60, 56, - 0, 1, 0, 1, 64, 56, 2, 1, 0, 1, 64, 64, 1, 1, 0, 1, 64, 56, - 0, 1, 0, 1, 100, 52, 2, 1, 0, 1, 100, 64, 1, 1, 0, 1, 100, 64, - 0, 1, 0, 1, 104, 64, 2, 1, 0, 1, 104, 64, 1, 1, 0, 1, 104, 64, - 0, 1, 0, 1, 108, 64, 2, 1, 0, 1, 108, 64, 1, 1, 0, 1, 108, 64, - 0, 1, 0, 1, 112, 64, 2, 1, 0, 1, 112, 64, 1, 1, 0, 1, 112, 64, - 0, 1, 0, 1, 116, 64, 2, 1, 0, 1, 116, 64, 1, 1, 0, 1, 116, 64, - 0, 1, 0, 1, 120, 64, 2, 1, 0, 1, 120, 64, 1, 1, 0, 1, 120, 64, - 0, 1, 0, 1, 124, 64, 2, 1, 0, 1, 124, 64, 1, 1, 0, 1, 124, 64, - 0, 1, 0, 1, 128, 64, 2, 1, 0, 1, 128, 64, 1, 1, 0, 1, 128, 64, - 0, 1, 0, 1, 132, 64, 2, 1, 0, 1, 132, 64, 1, 1, 0, 1, 132, 64, - 0, 1, 0, 1, 136, 64, 2, 1, 0, 1, 136, 64, 1, 1, 0, 1, 136, 64, - 0, 1, 0, 1, 140, 56, 2, 1, 0, 1, 140, 64, 1, 1, 0, 1, 140, 64, - 0, 1, 0, 1, 144, 56, 2, 1, 0, 1, 144, 64, 1, 1, 0, 1, 144, 127, - 0, 1, 0, 1, 149, 64, 2, 1, 0, 1, 149, 127, 1, 1, 0, 1, 149, 127, - 0, 1, 0, 1, 153, 64, 2, 1, 0, 1, 153, 127, 1, 1, 0, 1, 153, 127, - 0, 1, 0, 1, 157, 64, 2, 1, 0, 1, 157, 127, 1, 1, 0, 1, 157, 127, - 0, 1, 0, 1, 161, 64, 2, 1, 0, 1, 161, 127, 1, 1, 0, 1, 161, 127, - 0, 1, 0, 1, 165, 64, 2, 1, 0, 1, 165, 127, 1, 1, 0, 1, 165, 127, - 0, 1, 0, 2, 36, 60, 2, 1, 0, 2, 36, 64, 1, 1, 0, 2, 36, 56, - 0, 1, 0, 2, 40, 64, 2, 1, 0, 2, 40, 64, 1, 1, 0, 2, 40, 56, - 0, 1, 0, 2, 44, 64, 2, 1, 0, 2, 44, 64, 1, 1, 0, 2, 44, 56, - 0, 1, 0, 2, 48, 64, 2, 1, 0, 2, 48, 64, 1, 1, 0, 2, 48, 56, - 0, 1, 0, 2, 52, 64, 2, 1, 0, 2, 52, 64, 1, 1, 0, 2, 52, 56, - 0, 1, 0, 2, 56, 64, 2, 1, 0, 2, 56, 64, 1, 1, 0, 2, 56, 56, - 0, 1, 0, 2, 60, 64, 2, 1, 0, 2, 60, 64, 1, 1, 0, 2, 60, 56, - 0, 1, 0, 2, 64, 56, 2, 1, 0, 2, 64, 64, 1, 1, 0, 2, 64, 56, - 0, 1, 0, 2, 100, 52, 2, 1, 0, 2, 100, 64, 1, 1, 0, 2, 100, 64, - 0, 1, 0, 2, 104, 64, 2, 1, 0, 2, 104, 64, 1, 1, 0, 2, 104, 64, - 0, 1, 0, 2, 108, 64, 2, 1, 0, 2, 108, 64, 1, 1, 0, 2, 108, 64, - 0, 1, 0, 2, 112, 64, 2, 1, 0, 2, 112, 64, 1, 1, 0, 2, 112, 64, - 0, 1, 0, 2, 116, 64, 2, 1, 0, 2, 116, 64, 1, 1, 0, 2, 116, 64, - 0, 1, 0, 2, 120, 64, 2, 1, 0, 2, 120, 64, 1, 1, 0, 2, 120, 64, - 0, 1, 0, 2, 124, 64, 2, 1, 0, 2, 124, 64, 1, 1, 0, 2, 124, 64, - 0, 1, 0, 2, 128, 64, 2, 1, 0, 2, 128, 64, 1, 1, 0, 2, 128, 64, - 0, 1, 0, 2, 132, 64, 2, 1, 0, 2, 132, 64, 1, 1, 0, 2, 132, 64, - 0, 1, 0, 2, 136, 64, 2, 1, 0, 2, 136, 64, 1, 1, 0, 2, 136, 64, - 0, 1, 0, 2, 140, 52, 2, 1, 0, 2, 140, 64, 1, 1, 0, 2, 140, 64, - 0, 1, 0, 2, 144, 52, 2, 1, 0, 2, 144, 127, 1, 1, 0, 2, 144, 127, - 0, 1, 0, 2, 149, 64, 2, 1, 0, 2, 149, 127, 1, 1, 0, 2, 149, 127, - 0, 1, 0, 2, 153, 64, 2, 1, 0, 2, 153, 127, 1, 1, 0, 2, 153, 127, - 0, 1, 0, 2, 157, 64, 2, 1, 0, 2, 157, 127, 1, 1, 0, 2, 157, 127, - 0, 1, 0, 2, 161, 64, 2, 1, 0, 2, 161, 127, 1, 1, 0, 2, 161, 127, - 0, 1, 0, 2, 165, 64, 2, 1, 0, 2, 165, 127, 1, 1, 0, 2, 165, 127, - 0, 1, 0, 3, 36, 56, 2, 1, 0, 3, 36, 40, 1, 1, 0, 3, 36, 44, - 0, 1, 0, 3, 40, 60, 2, 1, 0, 3, 40, 40, 1, 1, 0, 3, 40, 44, - 0, 1, 0, 3, 44, 60, 2, 1, 0, 3, 44, 40, 1, 1, 0, 3, 44, 44, - 0, 1, 0, 3, 48, 60, 2, 1, 0, 3, 48, 40, 1, 1, 0, 3, 48, 44, - 0, 1, 0, 3, 52, 60, 2, 1, 0, 3, 52, 40, 1, 1, 0, 3, 52, 44, - 0, 1, 0, 3, 56, 60, 2, 1, 0, 3, 56, 40, 1, 1, 0, 3, 56, 44, - 0, 1, 0, 3, 60, 60, 2, 1, 0, 3, 60, 40, 1, 1, 0, 3, 60, 44, - 0, 1, 0, 3, 64, 56, 2, 1, 0, 3, 64, 40, 1, 1, 0, 3, 64, 44, - 0, 1, 0, 3, 100, 52, 2, 1, 0, 3, 100, 40, 1, 1, 0, 3, 100, 60, - 0, 1, 0, 3, 104, 60, 2, 1, 0, 3, 104, 40, 1, 1, 0, 3, 104, 60, - 0, 1, 0, 3, 108, 64, 2, 1, 0, 3, 108, 40, 1, 1, 0, 3, 108, 60, - 0, 1, 0, 3, 112, 64, 2, 1, 0, 3, 112, 40, 1, 1, 0, 3, 112, 60, - 0, 1, 0, 3, 116, 64, 2, 1, 0, 3, 116, 40, 1, 1, 0, 3, 116, 60, - 0, 1, 0, 3, 120, 64, 2, 1, 0, 3, 120, 40, 1, 1, 0, 3, 120, 60, - 0, 1, 0, 3, 124, 64, 2, 1, 0, 3, 124, 40, 1, 1, 0, 3, 124, 60, - 0, 1, 0, 3, 128, 64, 2, 1, 0, 3, 128, 40, 1, 1, 0, 3, 128, 60, - 0, 1, 0, 3, 132, 64, 2, 1, 0, 3, 132, 40, 1, 1, 0, 3, 132, 60, - 0, 1, 0, 3, 136, 60, 2, 1, 0, 3, 136, 40, 1, 1, 0, 3, 136, 60, - 0, 1, 0, 3, 140, 52, 2, 1, 0, 3, 140, 40, 1, 1, 0, 3, 140, 60, - 0, 1, 0, 3, 144, 52, 2, 1, 0, 3, 144, 127, 1, 1, 0, 3, 144, 127, - 0, 1, 0, 3, 149, 64, 2, 1, 0, 3, 149, 127, 1, 1, 0, 3, 149, 127, - 0, 1, 0, 3, 153, 64, 2, 1, 0, 3, 153, 127, 1, 1, 0, 3, 153, 127, - 0, 1, 0, 3, 157, 64, 2, 1, 0, 3, 157, 127, 1, 1, 0, 3, 157, 127, - 0, 1, 0, 3, 161, 64, 2, 1, 0, 3, 161, 127, 1, 1, 0, 3, 161, 127, - 0, 1, 0, 3, 165, 64, 2, 1, 0, 3, 165, 127, 1, 1, 0, 3, 165, 127, - 0, 1, 1, 2, 38, 44, 2, 1, 1, 2, 38, 60, 1, 1, 1, 2, 38, 60, - 0, 1, 1, 2, 46, 60, 2, 1, 1, 2, 46, 60, 1, 1, 1, 2, 46, 60, - 0, 1, 1, 2, 54, 60, 2, 1, 1, 2, 54, 60, 1, 1, 1, 2, 54, 60, - 0, 1, 1, 2, 62, 48, 2, 1, 1, 2, 62, 60, 1, 1, 1, 2, 62, 60, - 0, 1, 1, 2, 102, 48, 2, 1, 1, 2, 102, 60, 1, 1, 1, 2, 102, 60, - 0, 1, 1, 2, 110, 60, 2, 1, 1, 2, 110, 60, 1, 1, 1, 2, 110, 60, - 0, 1, 1, 2, 118, 60, 2, 1, 1, 2, 118, 60, 1, 1, 1, 2, 118, 60, - 0, 1, 1, 2, 126, 60, 2, 1, 1, 2, 126, 60, 1, 1, 1, 2, 126, 60, - 0, 1, 1, 2, 134, 60, 2, 1, 1, 2, 134, 60, 1, 1, 1, 2, 134, 60, - 0, 1, 1, 2, 142, 60, 2, 1, 1, 2, 142, 127, 1, 1, 1, 2, 142, 127, - 0, 1, 1, 2, 151, 60, 2, 1, 1, 2, 151, 127, 1, 1, 1, 2, 151, 127, - 0, 1, 1, 2, 159, 60, 2, 1, 1, 2, 159, 127, 1, 1, 1, 2, 159, 127, - 0, 1, 1, 3, 38, 40, 2, 1, 1, 3, 38, 40, 1, 1, 1, 3, 38, 44, - 0, 1, 1, 3, 46, 60, 2, 1, 1, 3, 46, 40, 1, 1, 1, 3, 46, 44, - 0, 1, 1, 3, 54, 60, 2, 1, 1, 3, 54, 40, 1, 1, 1, 3, 54, 44, - 0, 1, 1, 3, 62, 44, 2, 1, 1, 3, 62, 40, 1, 1, 1, 3, 62, 44, - 0, 1, 1, 3, 102, 44, 2, 1, 1, 3, 102, 40, 1, 1, 1, 3, 102, 60, - 0, 1, 1, 3, 110, 60, 2, 1, 1, 3, 110, 40, 1, 1, 1, 3, 110, 60, - 0, 1, 1, 3, 118, 60, 2, 1, 1, 3, 118, 40, 1, 1, 1, 3, 118, 60, - 0, 1, 1, 3, 126, 60, 2, 1, 1, 3, 126, 40, 1, 1, 1, 3, 126, 60, - 0, 1, 1, 3, 134, 60, 2, 1, 1, 3, 134, 40, 1, 1, 1, 3, 134, 60, - 0, 1, 1, 3, 142, 60, 2, 1, 1, 3, 142, 127, 1, 1, 1, 3, 142, 127, - 0, 1, 1, 3, 151, 60, 2, 1, 1, 3, 151, 127, 1, 1, 1, 3, 151, 127, - 0, 1, 1, 3, 159, 60, 2, 1, 1, 3, 159, 127, 1, 1, 1, 3, 159, 127, - 0, 1, 2, 4, 42, 40, 2, 1, 2, 4, 42, 60, 1, 1, 2, 4, 42, 56, - 0, 1, 2, 4, 58, 40, 2, 1, 2, 4, 58, 60, 1, 1, 2, 4, 58, 56, - 0, 1, 2, 4, 106, 40, 2, 1, 2, 4, 106, 60, 1, 1, 2, 4, 106, 60, - 0, 1, 2, 4, 122, 60, 2, 1, 2, 4, 122, 60, 1, 1, 2, 4, 122, 60, - 0, 1, 2, 4, 138, 60, 2, 1, 2, 4, 138, 127, 1, 1, 2, 4, 138, 127, - 0, 1, 2, 4, 155, 60, 2, 1, 2, 4, 155, 127, 1, 1, 2, 4, 155, 127, - 0, 1, 2, 5, 42, 36, 2, 1, 2, 5, 42, 40, 1, 1, 2, 5, 42, 44, - 0, 1, 2, 5, 58, 36, 2, 1, 2, 5, 58, 40, 1, 1, 2, 5, 58, 44, - 0, 1, 2, 5, 106, 40, 2, 1, 2, 5, 106, 40, 1, 1, 2, 5, 106, 60, - 0, 1, 2, 5, 122, 60, 2, 1, 2, 5, 122, 40, 1, 1, 2, 5, 122, 60, - 0, 1, 2, 5, 138, 60, 2, 1, 2, 5, 138, 127, 1, 1, 2, 5, 138, 127, - 0, 1, 2, 5, 155, 60, 2, 1, 2, 5, 155, 127, 1, 1, 2, 5, 155, 127 + 0, 0, 0, 0, 1, 72, 2, 0, 0, 0, 1, 60, + 0, 0, 0, 0, 2, 72, 2, 0, 0, 0, 2, 60, + 0, 0, 0, 0, 3, 76, 2, 0, 0, 0, 3, 60, + 0, 0, 0, 0, 4, 76, 2, 0, 0, 0, 4, 60, + 0, 0, 0, 0, 5, 76, 2, 0, 0, 0, 5, 60, + 0, 0, 0, 0, 6, 76, 2, 0, 0, 0, 6, 60, + 0, 0, 0, 0, 7, 76, 2, 0, 0, 0, 7, 60, + 0, 0, 0, 0, 8, 76, 2, 0, 0, 0, 8, 60, + 0, 0, 0, 0, 9, 76, 2, 0, 0, 0, 9, 60, + 0, 0, 0, 0, 10, 72, 2, 0, 0, 0, 10, 60, + 0, 0, 0, 0, 11, 72, 2, 0, 0, 0, 11, 60, + 0, 0, 0, 0, 12, 52, 2, 0, 0, 0, 12, 60, + 0, 0, 0, 0, 13, 48, 2, 0, 0, 0, 13, 60, + 0, 0, 0, 0, 14, 127, 2, 0, 0, 0, 14, 127, + 0, 0, 0, 1, 1, 52, 2, 0, 0, 1, 1, 60, + 0, 0, 0, 1, 2, 60, 2, 0, 0, 1, 2, 60, + 0, 0, 0, 1, 3, 64, 2, 0, 0, 1, 3, 60, + 0, 0, 0, 1, 4, 68, 2, 0, 0, 1, 4, 60, + 0, 0, 0, 1, 5, 76, 2, 0, 0, 1, 5, 60, + 0, 0, 0, 1, 6, 76, 2, 0, 0, 1, 6, 60, + 0, 0, 0, 1, 7, 76, 2, 0, 0, 1, 7, 60, + 0, 0, 0, 1, 8, 68, 2, 0, 0, 1, 8, 60, + 0, 0, 0, 1, 9, 64, 2, 0, 0, 1, 9, 60, + 0, 0, 0, 1, 10, 60, 2, 0, 0, 1, 10, 60, + 0, 0, 0, 1, 11, 52, 2, 0, 0, 1, 11, 60, + 0, 0, 0, 1, 12, 40, 2, 0, 0, 1, 12, 60, + 0, 0, 0, 1, 13, 28, 2, 0, 0, 1, 13, 60, + 0, 0, 0, 1, 14, 127, 2, 0, 0, 1, 14, 127, + 0, 0, 0, 2, 1, 52, 2, 0, 0, 2, 1, 60, + 0, 0, 0, 2, 2, 60, 2, 0, 0, 2, 2, 60, + 0, 0, 0, 2, 3, 64, 2, 0, 0, 2, 3, 60, + 0, 0, 0, 2, 4, 68, 2, 0, 0, 2, 4, 60, + 0, 0, 0, 2, 5, 76, 2, 0, 0, 2, 5, 60, + 0, 0, 0, 2, 6, 76, 2, 0, 0, 2, 6, 60, + 0, 0, 0, 2, 7, 76, 2, 0, 0, 2, 7, 60, + 0, 0, 0, 2, 8, 68, 2, 0, 0, 2, 8, 60, + 0, 0, 0, 2, 9, 64, 2, 0, 0, 2, 9, 60, + 0, 0, 0, 2, 10, 60, 2, 0, 0, 2, 10, 60, + 0, 0, 0, 2, 11, 52, 2, 0, 0, 2, 11, 60, + 0, 0, 0, 2, 12, 40, 2, 0, 0, 2, 12, 60, + 0, 0, 0, 2, 13, 28, 2, 0, 0, 2, 13, 60, + 0, 0, 0, 2, 14, 127, 2, 0, 0, 2, 14, 127, + 0, 0, 0, 3, 1, 52, 2, 0, 0, 3, 1, 36, + 0, 0, 0, 3, 2, 60, 2, 0, 0, 3, 2, 36, + 0, 0, 0, 3, 3, 64, 2, 0, 0, 3, 3, 36, + 0, 0, 0, 3, 4, 68, 2, 0, 0, 3, 4, 36, + 0, 0, 0, 3, 5, 76, 2, 0, 0, 3, 5, 36, + 0, 0, 0, 3, 6, 76, 2, 0, 0, 3, 6, 36, + 0, 0, 0, 3, 7, 76, 2, 0, 0, 3, 7, 36, + 0, 0, 0, 3, 8, 68, 2, 0, 0, 3, 8, 36, + 0, 0, 0, 3, 9, 64, 2, 0, 0, 3, 9, 36, + 0, 0, 0, 3, 10, 60, 2, 0, 0, 3, 10, 36, + 0, 0, 0, 3, 11, 52, 2, 0, 0, 3, 11, 36, + 0, 0, 0, 3, 12, 40, 2, 0, 0, 3, 12, 36, + 0, 0, 0, 3, 13, 28, 2, 0, 0, 3, 13, 36, + 0, 0, 0, 3, 14, 127, 2, 0, 0, 3, 14, 127, + 0, 0, 1, 2, 1, 127, 2, 0, 1, 2, 1, 127, + 0, 0, 1, 2, 2, 127, 2, 0, 1, 2, 2, 127, + 0, 0, 1, 2, 3, 52, 2, 0, 1, 2, 3, 60, + 0, 0, 1, 2, 4, 52, 2, 0, 1, 2, 4, 60, + 0, 0, 1, 2, 5, 60, 2, 0, 1, 2, 5, 60, + 0, 0, 1, 2, 6, 64, 2, 0, 1, 2, 6, 60, + 0, 0, 1, 2, 7, 60, 2, 0, 1, 2, 7, 60, + 0, 0, 1, 2, 8, 52, 2, 0, 1, 2, 8, 60, + 0, 0, 1, 2, 9, 52, 2, 0, 1, 2, 9, 60, + 0, 0, 1, 2, 10, 40, 2, 0, 1, 2, 10, 60, + 0, 0, 1, 2, 11, 28, 2, 0, 1, 2, 11, 60, + 0, 0, 1, 2, 12, 127, 2, 0, 1, 2, 12, 127, + 0, 0, 1, 2, 13, 127, 2, 0, 1, 2, 13, 127, + 0, 0, 1, 2, 14, 127, 2, 0, 1, 2, 14, 127, + 0, 0, 1, 3, 1, 127, 2, 0, 1, 3, 1, 127, + 0, 0, 1, 3, 2, 127, 2, 0, 1, 3, 2, 127, + 0, 0, 1, 3, 3, 48, 2, 0, 1, 3, 3, 36, + 0, 0, 1, 3, 4, 48, 2, 0, 1, 3, 4, 36, + 0, 0, 1, 3, 5, 60, 2, 0, 1, 3, 5, 36, + 0, 0, 1, 3, 6, 64, 2, 0, 1, 3, 6, 36, + 0, 0, 1, 3, 7, 60, 2, 0, 1, 3, 7, 36, + 0, 0, 1, 3, 8, 52, 2, 0, 1, 3, 8, 36, + 0, 0, 1, 3, 9, 52, 2, 0, 1, 3, 9, 36, + 0, 0, 1, 3, 10, 40, 2, 0, 1, 3, 10, 36, + 0, 0, 1, 3, 11, 26, 2, 0, 1, 3, 11, 36, + 0, 0, 1, 3, 12, 127, 2, 0, 1, 3, 12, 127, + 0, 0, 1, 3, 13, 127, 2, 0, 1, 3, 13, 127, + 0, 0, 1, 3, 14, 127, 2, 0, 1, 3, 14, 127, + 0, 1, 0, 1, 36, 74, 2, 1, 0, 1, 36, 62, + 0, 1, 0, 1, 40, 80, 2, 1, 0, 1, 40, 62, + 0, 1, 0, 1, 44, 80, 2, 1, 0, 1, 44, 62, + 0, 1, 0, 1, 48, 80, 2, 1, 0, 1, 48, 62, + 0, 1, 0, 1, 52, 80, 2, 1, 0, 1, 52, 62, + 0, 1, 0, 1, 56, 80, 2, 1, 0, 1, 56, 62, + 0, 1, 0, 1, 60, 80, 2, 1, 0, 1, 60, 62, + 0, 1, 0, 1, 64, 74, 2, 1, 0, 1, 64, 62, + 0, 1, 0, 1, 100, 72, 2, 1, 0, 1, 100, 62, + 0, 1, 0, 1, 104, 80, 2, 1, 0, 1, 104, 62, + 0, 1, 0, 1, 108, 80, 2, 1, 0, 1, 108, 62, + 0, 1, 0, 1, 112, 80, 2, 1, 0, 1, 112, 62, + 0, 1, 0, 1, 116, 80, 2, 1, 0, 1, 116, 62, + 0, 1, 0, 1, 120, 80, 2, 1, 0, 1, 120, 62, + 0, 1, 0, 1, 124, 80, 2, 1, 0, 1, 124, 62, + 0, 1, 0, 1, 128, 80, 2, 1, 0, 1, 128, 62, + 0, 1, 0, 1, 132, 80, 2, 1, 0, 1, 132, 62, + 0, 1, 0, 1, 136, 80, 2, 1, 0, 1, 136, 62, + 0, 1, 0, 1, 140, 72, 2, 1, 0, 1, 140, 62, + 0, 1, 0, 1, 144, 80, 2, 1, 0, 1, 144, 127, + 0, 1, 0, 1, 149, 80, 2, 1, 0, 1, 149, 127, + 0, 1, 0, 1, 153, 80, 2, 1, 0, 1, 153, 127, + 0, 1, 0, 1, 157, 80, 2, 1, 0, 1, 157, 127, + 0, 1, 0, 1, 161, 80, 2, 1, 0, 1, 161, 127, + 0, 1, 0, 1, 165, 80, 2, 1, 0, 1, 165, 127, + 0, 1, 0, 2, 36, 72, 2, 1, 0, 2, 36, 62, + 0, 1, 0, 2, 40, 80, 2, 1, 0, 2, 40, 62, + 0, 1, 0, 2, 44, 80, 2, 1, 0, 2, 44, 62, + 0, 1, 0, 2, 48, 80, 2, 1, 0, 2, 48, 62, + 0, 1, 0, 2, 52, 80, 2, 1, 0, 2, 52, 62, + 0, 1, 0, 2, 56, 80, 2, 1, 0, 2, 56, 62, + 0, 1, 0, 2, 60, 80, 2, 1, 0, 2, 60, 62, + 0, 1, 0, 2, 64, 74, 2, 1, 0, 2, 64, 62, + 0, 1, 0, 2, 100, 70, 2, 1, 0, 2, 100, 62, + 0, 1, 0, 2, 104, 80, 2, 1, 0, 2, 104, 62, + 0, 1, 0, 2, 108, 80, 2, 1, 0, 2, 108, 62, + 0, 1, 0, 2, 112, 80, 2, 1, 0, 2, 112, 62, + 0, 1, 0, 2, 116, 80, 2, 1, 0, 2, 116, 62, + 0, 1, 0, 2, 120, 80, 2, 1, 0, 2, 120, 62, + 0, 1, 0, 2, 124, 80, 2, 1, 0, 2, 124, 62, + 0, 1, 0, 2, 128, 80, 2, 1, 0, 2, 128, 62, + 0, 1, 0, 2, 132, 80, 2, 1, 0, 2, 132, 62, + 0, 1, 0, 2, 136, 80, 2, 1, 0, 2, 136, 62, + 0, 1, 0, 2, 140, 70, 2, 1, 0, 2, 140, 62, + 0, 1, 0, 2, 144, 80, 2, 1, 0, 2, 144, 127, + 0, 1, 0, 2, 149, 80, 2, 1, 0, 2, 149, 127, + 0, 1, 0, 2, 153, 80, 2, 1, 0, 2, 153, 127, + 0, 1, 0, 2, 157, 80, 2, 1, 0, 2, 157, 127, + 0, 1, 0, 2, 161, 80, 2, 1, 0, 2, 161, 127, + 0, 1, 0, 2, 165, 80, 2, 1, 0, 2, 165, 127, + 0, 1, 0, 3, 36, 68, 2, 1, 0, 3, 36, 38, + 0, 1, 0, 3, 40, 68, 2, 1, 0, 3, 40, 38, + 0, 1, 0, 3, 44, 68, 2, 1, 0, 3, 44, 38, + 0, 1, 0, 3, 48, 68, 2, 1, 0, 3, 48, 38, + 0, 1, 0, 3, 52, 68, 2, 1, 0, 3, 52, 38, + 0, 1, 0, 3, 56, 68, 2, 1, 0, 3, 56, 38, + 0, 1, 0, 3, 60, 66, 2, 1, 0, 3, 60, 38, + 0, 1, 0, 3, 64, 68, 2, 1, 0, 3, 64, 38, + 0, 1, 0, 3, 100, 60, 2, 1, 0, 3, 100, 38, + 0, 1, 0, 3, 104, 68, 2, 1, 0, 3, 104, 38, + 0, 1, 0, 3, 108, 68, 2, 1, 0, 3, 108, 38, + 0, 1, 0, 3, 112, 68, 2, 1, 0, 3, 112, 38, + 0, 1, 0, 3, 116, 68, 2, 1, 0, 3, 116, 38, + 0, 1, 0, 3, 120, 68, 2, 1, 0, 3, 120, 38, + 0, 1, 0, 3, 124, 68, 2, 1, 0, 3, 124, 38, + 0, 1, 0, 3, 128, 68, 2, 1, 0, 3, 128, 38, + 0, 1, 0, 3, 132, 68, 2, 1, 0, 3, 132, 38, + 0, 1, 0, 3, 136, 68, 2, 1, 0, 3, 136, 38, + 0, 1, 0, 3, 140, 60, 2, 1, 0, 3, 140, 38, + 0, 1, 0, 3, 144, 68, 2, 1, 0, 3, 144, 127, + 0, 1, 0, 3, 149, 80, 2, 1, 0, 3, 149, 127, + 0, 1, 0, 3, 153, 80, 2, 1, 0, 3, 153, 127, + 0, 1, 0, 3, 157, 80, 2, 1, 0, 3, 157, 127, + 0, 1, 0, 3, 161, 80, 2, 1, 0, 3, 161, 127, + 0, 1, 0, 3, 165, 80, 2, 1, 0, 3, 165, 127, + 0, 1, 1, 2, 38, 66, 2, 1, 1, 2, 38, 64, + 0, 1, 1, 2, 46, 72, 2, 1, 1, 2, 46, 64, + 0, 1, 1, 2, 54, 72, 2, 1, 1, 2, 54, 64, + 0, 1, 1, 2, 62, 64, 2, 1, 1, 2, 62, 64, + 0, 1, 1, 2, 102, 58, 2, 1, 1, 2, 102, 64, + 0, 1, 1, 2, 110, 74, 2, 1, 1, 2, 110, 64, + 0, 1, 1, 2, 118, 74, 2, 1, 1, 2, 118, 64, + 0, 1, 1, 2, 126, 74, 2, 1, 1, 2, 126, 64, + 0, 1, 1, 2, 134, 74, 2, 1, 1, 2, 134, 64, + 0, 1, 1, 2, 142, 74, 2, 1, 1, 2, 142, 127, + 0, 1, 1, 2, 151, 74, 2, 1, 1, 2, 151, 127, + 0, 1, 1, 2, 159, 74, 2, 1, 1, 2, 159, 127, + 0, 1, 1, 3, 38, 60, 2, 1, 1, 3, 38, 40, + 0, 1, 1, 3, 46, 68, 2, 1, 1, 3, 46, 40, + 0, 1, 1, 3, 54, 68, 2, 1, 1, 3, 54, 40, + 0, 1, 1, 3, 62, 58, 2, 1, 1, 3, 62, 40, + 0, 1, 1, 3, 102, 54, 2, 1, 1, 3, 102, 40, + 0, 1, 1, 3, 110, 68, 2, 1, 1, 3, 110, 40, + 0, 1, 1, 3, 118, 68, 2, 1, 1, 3, 118, 40, + 0, 1, 1, 3, 126, 68, 2, 1, 1, 3, 126, 40, + 0, 1, 1, 3, 134, 68, 2, 1, 1, 3, 134, 40, + 0, 1, 1, 3, 142, 68, 2, 1, 1, 3, 142, 127, + 0, 1, 1, 3, 151, 74, 2, 1, 1, 3, 151, 127, + 0, 1, 1, 3, 159, 74, 2, 1, 1, 3, 159, 127, + 0, 1, 2, 4, 42, 64, 2, 1, 2, 4, 42, 64, + 0, 1, 2, 4, 58, 62, 2, 1, 2, 4, 58, 64, + 0, 1, 2, 4, 106, 58, 2, 1, 2, 4, 106, 64, + 0, 1, 2, 4, 122, 72, 2, 1, 2, 4, 122, 64, + 0, 1, 2, 4, 138, 72, 2, 1, 2, 4, 138, 127, + 0, 1, 2, 4, 155, 72, 2, 1, 2, 4, 155, 127, + 0, 1, 2, 5, 42, 54, 2, 1, 2, 5, 42, 40, + 0, 1, 2, 5, 58, 52, 2, 1, 2, 5, 58, 40, + 0, 1, 2, 5, 106, 50, 2, 1, 2, 5, 106, 40, + 0, 1, 2, 5, 122, 66, 2, 1, 2, 5, 122, 40, + 0, 1, 2, 5, 138, 66, 2, 1, 2, 5, 138, 127, + 0, 1, 2, 5, 155, 62, 2, 1, 2, 5, 155, 127 }; RTW_DECL_TABLE_TXPWR_LMT(rtw8822c_txpwr_lmt_type0); + +static const u32 rtw8822c_array_mp_cal_init[] = { + 0x1b00, 0x00000008, + 0x1b00, 0x00A70008, + 0x1b00, 0x00150008, + 0x1b00, 0x00000008, + 0x1b04, 0xE2462952, + 0x1b08, 0x00000080, + 0x1b0c, 0x00000000, + 0x1b10, 0x00010C00, + 0x1b14, 0x00000000, + 0x1b18, 0x00292903, + 0x1b1c, 0xA218FC32, + 0x1b20, 0x01040008, + 0x1b24, 0x00060008, + 0x1b28, 0x00060300, + 0x1b2C, 0x00180018, + 0x1b30, 0x40000000, + 0x1b34, 0x00000800, + 0x1b38, 0x40000000, + 0x1b3C, 0x40000000, + 0x1b98, 0x00000000, + 0x1b9c, 0x00000000, + 0x1bc0, 0x01000000, + 0x1bcc, 0x00000000, + 0x1be4, 0x00000000, + 0x1bec, 0x40000000, + 0x1b40, 0x40000000, + 0x1b44, 0x20004064, + 0x1b48, 0x0005002D, + 0x1b4c, 0x00000000, + 0x1b60, 0x1F100000, + 0x1b64, 0x12000000, + 0x1b4c, 0x00000000, + 0x1b4c, 0x008a0000, + 0x1b50, 0x000003BE, + 0x1b4c, 0x018a0000, + 0x1b50, 0x0000057A, + 0x1b4c, 0x028a0000, + 0x1b50, 0x000006C8, + 0x1b4c, 0x038a0000, + 0x1b50, 0x000007E0, + 0x1b4c, 0x048a0000, + 0x1b50, 0x000008D5, + 0x1b4c, 0x058a0000, + 0x1b50, 0x000009B2, + 0x1b4c, 0x068a0000, + 0x1b50, 0x00000A7D, + 0x1b4c, 0x078a0000, + 0x1b50, 0x00000B3A, + 0x1b4c, 0x088a0000, + 0x1b50, 0x00000BEB, + 0x1b4c, 0x098a0000, + 0x1b50, 0x00000C92, + 0x1b4c, 0x0A8a0000, + 0x1b50, 0x00000D31, + 0x1b4c, 0x0B8a0000, + 0x1b50, 0x00000DC9, + 0x1b4c, 0x0C8a0000, + 0x1b50, 0x00000E5A, + 0x1b4c, 0x0D8a0000, + 0x1b50, 0x00000EE6, + 0x1b4c, 0x0E8a0000, + 0x1b50, 0x00000F6D, + 0x1b4c, 0x0F8a0000, + 0x1b50, 0x00000FF0, + 0x1b4c, 0x108a0000, + 0x1b50, 0x0000106F, + 0x1b4c, 0x118a0000, + 0x1b50, 0x000010E9, + 0x1b4c, 0x128a0000, + 0x1b50, 0x00001161, + 0x1b4c, 0x138a0000, + 0x1b50, 0x000011D5, + 0x1b4c, 0x148a0000, + 0x1b50, 0x00001247, + 0x1b4c, 0x158a0000, + 0x1b50, 0x000012B5, + 0x1b4c, 0x168a0000, + 0x1b50, 0x00001322, + 0x1b4c, 0x178a0000, + 0x1b50, 0x0000138B, + 0x1b4c, 0x188a0000, + 0x1b50, 0x000013F3, + 0x1b4c, 0x198a0000, + 0x1b50, 0x00001459, + 0x1b4c, 0x1A8a0000, + 0x1b50, 0x000014BD, + 0x1b4c, 0x1B8a0000, + 0x1b50, 0x0000151E, + 0x1b4c, 0x1C8a0000, + 0x1b50, 0x0000157F, + 0x1b4c, 0x1D8a0000, + 0x1b50, 0x000015DD, + 0x1b4c, 0x1E8a0000, + 0x1b50, 0x0000163A, + 0x1b4c, 0x1F8a0000, + 0x1b50, 0x00001695, + 0x1b4c, 0x208a0000, + 0x1b50, 0x000016EF, + 0x1b4c, 0x218a0000, + 0x1b50, 0x00001748, + 0x1b4c, 0x228a0000, + 0x1b50, 0x0000179F, + 0x1b4c, 0x238a0000, + 0x1b50, 0x000017F5, + 0x1b4c, 0x248a0000, + 0x1b50, 0x0000184A, + 0x1b4c, 0x258a0000, + 0x1b50, 0x0000189E, + 0x1b4c, 0x268a0000, + 0x1b50, 0x000018F1, + 0x1b4c, 0x278a0000, + 0x1b50, 0x00001942, + 0x1b4c, 0x288a0000, + 0x1b50, 0x00001993, + 0x1b4c, 0x298a0000, + 0x1b50, 0x000019E2, + 0x1b4c, 0x2A8a0000, + 0x1b50, 0x00001A31, + 0x1b4c, 0x2B8a0000, + 0x1b50, 0x00001A7F, + 0x1b4c, 0x2C8a0000, + 0x1b50, 0x00001ACC, + 0x1b4c, 0x2D8a0000, + 0x1b50, 0x00001B18, + 0x1b4c, 0x2E8a0000, + 0x1b50, 0x00001B63, + 0x1b4c, 0x2F8a0000, + 0x1b50, 0x00001BAD, + 0x1b4c, 0x308a0000, + 0x1b50, 0x00001BF7, + 0x1b4c, 0x318a0000, + 0x1b50, 0x00001C40, + 0x1b4c, 0x328a0000, + 0x1b50, 0x00001C88, + 0x1b4c, 0x338a0000, + 0x1b50, 0x00001CCF, + 0x1b4c, 0x348a0000, + 0x1b50, 0x00001D16, + 0x1b4c, 0x358a0000, + 0x1b50, 0x00001D5C, + 0x1b4c, 0x368a0000, + 0x1b50, 0x00001DA2, + 0x1b4c, 0x378a0000, + 0x1b50, 0x00001DE6, + 0x1b4c, 0x388a0000, + 0x1b50, 0x00001E2B, + 0x1b4c, 0x398a0000, + 0x1b50, 0x00001E6E, + 0x1b4c, 0x3A8a0000, + 0x1b50, 0x00001EB1, + 0x1b4c, 0x3B8a0000, + 0x1b50, 0x00001EF4, + 0x1b4c, 0x3C8a0000, + 0x1b50, 0x00001F35, + 0x1b4c, 0x3D8a0000, + 0x1b50, 0x00001F77, + 0x1b4c, 0x3E8a0000, + 0x1b50, 0x00001FB8, + 0x1b4c, 0x3F8a0000, + 0x1b50, 0x00001FF8, + 0x1b4c, 0x00000000, + 0x1b50, 0x00000000, + 0x1b58, 0x00890000, + 0x1b5C, 0x3C6B3FFF, + 0x1b58, 0x02890000, + 0x1b5C, 0x35D9390A, + 0x1b58, 0x04890000, + 0x1b5C, 0x2FFE32D6, + 0x1b58, 0x06890000, + 0x1b5C, 0x2AC62D4F, + 0x1b58, 0x08890000, + 0x1b5C, 0x261F2862, + 0x1b58, 0x0A890000, + 0x1b5C, 0x21FA23FD, + 0x1b58, 0x0C890000, + 0x1b5C, 0x1E482013, + 0x1b58, 0x0E890000, + 0x1b5C, 0x1AFD1C96, + 0x1b58, 0x10890000, + 0x1b5C, 0x180E197B, + 0x1b58, 0x12890000, + 0x1b5C, 0x157016B5, + 0x1b58, 0x14890000, + 0x1b5C, 0x131B143D, + 0x1b58, 0x16890000, + 0x1b5C, 0x1107120A, + 0x1b58, 0x18890000, + 0x1b5C, 0x0F2D1013, + 0x1b58, 0x1A890000, + 0x1b5C, 0x0D870E54, + 0x1b58, 0x1C890000, + 0x1b5C, 0x0C0E0CC5, + 0x1b58, 0x1E890000, + 0x1b5C, 0x0ABF0B62, + 0x1b58, 0x20890000, + 0x1b5C, 0x09930A25, + 0x1b58, 0x22890000, + 0x1b5C, 0x0889090A, + 0x1b58, 0x24890000, + 0x1b5C, 0x079B080F, + 0x1b58, 0x26890000, + 0x1b5C, 0x06C7072E, + 0x1b58, 0x28890000, + 0x1b5C, 0x060B0666, + 0x1b58, 0x2A890000, + 0x1b5C, 0x056305B4, + 0x1b58, 0x2C890000, + 0x1b5C, 0x04CD0515, + 0x1b58, 0x2E890000, + 0x1b5C, 0x04470488, + 0x1b58, 0x30890000, + 0x1b5C, 0x03D0040A, + 0x1b58, 0x32890000, + 0x1b5C, 0x03660399, + 0x1b58, 0x34890000, + 0x1b5C, 0x03070335, + 0x1b58, 0x36890000, + 0x1b5C, 0x02B302DC, + 0x1b58, 0x38890000, + 0x1b5C, 0x0268028C, + 0x1b58, 0x3A890000, + 0x1b5C, 0x02250245, + 0x1b58, 0x3C890000, + 0x1b5C, 0x01E90206, + 0x1b58, 0x3E890000, + 0x1b5C, 0x01B401CE, + 0x1b58, 0x40890000, + 0x1b5C, 0x0185019C, + 0x1b58, 0x42890000, + 0x1b5C, 0x015A016F, + 0x1b58, 0x44890000, + 0x1b5C, 0x01350147, + 0x1b58, 0x46890000, + 0x1b5C, 0x01130123, + 0x1b58, 0x48890000, + 0x1b5C, 0x00F50104, + 0x1b58, 0x4A890000, + 0x1b5C, 0x00DA00E7, + 0x1b58, 0x4C890000, + 0x1b5C, 0x00C300CE, + 0x1b58, 0x4E890000, + 0x1b5C, 0x00AE00B8, + 0x1b58, 0x50890000, + 0x1b5C, 0x009B00A4, + 0x1b58, 0x52890000, + 0x1b5C, 0x008A0092, + 0x1b58, 0x54890000, + 0x1b5C, 0x007B0082, + 0x1b58, 0x56890000, + 0x1b5C, 0x006E0074, + 0x1b58, 0x58890000, + 0x1b5C, 0x00620067, + 0x1b58, 0x5A890000, + 0x1b5C, 0x0057005C, + 0x1b58, 0x5C890000, + 0x1b5C, 0x004E0052, + 0x1b58, 0x5E890000, + 0x1b5C, 0x00450049, + 0x1b58, 0x60890000, + 0x1b5C, 0x003E0041, + 0x1b58, 0x62890000, + 0x1b5C, 0x0037003A, + 0x1b58, 0x62010000, + 0x1b00, 0x0000000A, + 0x1b00, 0x00A7000A, + 0x1b00, 0x0015000A, + 0x1b00, 0x0000000A, + 0x1b04, 0xE2462952, + 0x1b08, 0x00000080, + 0x1b0c, 0x00000000, + 0x1b10, 0x00010C00, + 0x1b14, 0x00000000, + 0x1b18, 0x00292903, + 0x1b1c, 0xA218FC32, + 0x1b20, 0x01040008, + 0x1b24, 0x00060008, + 0x1b28, 0x00060300, + 0x1b2C, 0x00180018, + 0x1b30, 0x40000000, + 0x1b34, 0x00000800, + 0x1b38, 0x40000000, + 0x1b3C, 0x40000000, + 0x1b98, 0x00000000, + 0x1b9c, 0x00000000, + 0x1bc0, 0x01000000, + 0x1bcc, 0x00000000, + 0x1be4, 0x00000000, + 0x1bec, 0x40000000, + 0x1b60, 0x1F100000, + 0x1b64, 0x12000000, + 0x1b58, 0x00890000, + 0x1b5C, 0x3C6B3FFF, + 0x1b58, 0x02890000, + 0x1b5C, 0x35D9390A, + 0x1b58, 0x04890000, + 0x1b5C, 0x2FFE32D6, + 0x1b58, 0x06890000, + 0x1b5C, 0x2AC62D4F, + 0x1b58, 0x08890000, + 0x1b5C, 0x261F2862, + 0x1b58, 0x0A890000, + 0x1b5C, 0x21FA23FD, + 0x1b58, 0x0C890000, + 0x1b5C, 0x1E482013, + 0x1b58, 0x0E890000, + 0x1b5C, 0x1AFD1C96, + 0x1b58, 0x10890000, + 0x1b5C, 0x180E197B, + 0x1b58, 0x12890000, + 0x1b5C, 0x157016B5, + 0x1b58, 0x14890000, + 0x1b5C, 0x131B143D, + 0x1b58, 0x16890000, + 0x1b5C, 0x1107120A, + 0x1b58, 0x18890000, + 0x1b5C, 0x0F2D1013, + 0x1b58, 0x1A890000, + 0x1b5C, 0x0D870E54, + 0x1b58, 0x1C890000, + 0x1b5C, 0x0C0E0CC5, + 0x1b58, 0x1E890000, + 0x1b5C, 0x0ABF0B62, + 0x1b58, 0x20890000, + 0x1b5C, 0x09930A25, + 0x1b58, 0x22890000, + 0x1b5C, 0x0889090A, + 0x1b58, 0x24890000, + 0x1b5C, 0x079B080F, + 0x1b58, 0x26890000, + 0x1b5C, 0x06C7072E, + 0x1b58, 0x28890000, + 0x1b5C, 0x060B0666, + 0x1b58, 0x2A890000, + 0x1b5C, 0x056305B4, + 0x1b58, 0x2C890000, + 0x1b5C, 0x04CD0515, + 0x1b58, 0x2E890000, + 0x1b5C, 0x04470488, + 0x1b58, 0x30890000, + 0x1b5C, 0x03D0040A, + 0x1b58, 0x32890000, + 0x1b5C, 0x03660399, + 0x1b58, 0x34890000, + 0x1b5C, 0x03070335, + 0x1b58, 0x36890000, + 0x1b5C, 0x02B302DC, + 0x1b58, 0x38890000, + 0x1b5C, 0x0268028C, + 0x1b58, 0x3A890000, + 0x1b5C, 0x02250245, + 0x1b58, 0x3C890000, + 0x1b5C, 0x01E90206, + 0x1b58, 0x3E890000, + 0x1b5C, 0x01B401CE, + 0x1b58, 0x40890000, + 0x1b5C, 0x0185019C, + 0x1b58, 0x42890000, + 0x1b5C, 0x015A016F, + 0x1b58, 0x44890000, + 0x1b5C, 0x01350147, + 0x1b58, 0x46890000, + 0x1b5C, 0x01130123, + 0x1b58, 0x48890000, + 0x1b5C, 0x00F50104, + 0x1b58, 0x4A890000, + 0x1b5C, 0x00DA00E7, + 0x1b58, 0x4C890000, + 0x1b5C, 0x00C300CE, + 0x1b58, 0x4E890000, + 0x1b5C, 0x00AE00B8, + 0x1b58, 0x50890000, + 0x1b5C, 0x009B00A4, + 0x1b58, 0x52890000, + 0x1b5C, 0x008A0092, + 0x1b58, 0x54890000, + 0x1b5C, 0x007B0082, + 0x1b58, 0x56890000, + 0x1b5C, 0x006E0074, + 0x1b58, 0x58890000, + 0x1b5C, 0x00620067, + 0x1b58, 0x5A890000, + 0x1b5C, 0x0057005C, + 0x1b58, 0x5C890000, + 0x1b5C, 0x004E0052, + 0x1b58, 0x5E890000, + 0x1b5C, 0x00450049, + 0x1b58, 0x60890000, + 0x1b5C, 0x003E0041, + 0x1b58, 0x62890000, + 0x1b5C, 0x0037003A, + 0x1b58, 0x62010000, + 0x1b00, 0x0000000C, + 0x1bd4, 0x000000F0, + 0x1bb8, 0x20202020, + 0x1bbc, 0x20202020, + 0x1bc0, 0x20202020, + 0x1bc4, 0x20202020, + 0x1bc8, 0x04040404, + 0x1bcc, 0x04040404, + 0x1bd0, 0x04040404, + 0x1bd8, 0x04040404, + 0x1bdc, 0x20202020, + 0x1be0, 0x04040404, + 0x1be4, 0x77472F17, + 0x1be8, 0xEFBFA78F, + 0x1bec, 0x00000000, + 0x1bf0, 0x1F1F1939, + 0x1b04, 0x0000005B, + 0x1b08, 0xB000C000, + 0x1b5c, 0x0000005B, + 0x1b60, 0xB000C000, + 0x1bb4, 0x20000000, + 0x1b00, 0x00000008, + 0x1b80, 0x00000007, + 0x1b80, 0x00080005, + 0x1b80, 0x00080007, + 0x1b80, 0x80000015, + 0x1b80, 0x80000017, + 0x1b80, 0x09080025, + 0x1b80, 0x09080027, + 0x1b80, 0x0f020035, + 0x1b80, 0x0f020037, + 0x1b80, 0x00220045, + 0x1b80, 0x00220047, + 0x1b80, 0x00040055, + 0x1b80, 0x00040057, + 0x1b80, 0x05c00065, + 0x1b80, 0x05c00067, + 0x1b80, 0x00070075, + 0x1b80, 0x00070077, + 0x1b80, 0x64020085, + 0x1b80, 0x64020087, + 0x1b80, 0x00020095, + 0x1b80, 0x00020097, + 0x1b80, 0x000400a5, + 0x1b80, 0x000400a7, + 0x1b80, 0x4a0000b5, + 0x1b80, 0x4a0000b7, + 0x1b80, 0x4b0400c5, + 0x1b80, 0x4b0400c7, + 0x1b80, 0x860300d5, + 0x1b80, 0x860300d7, + 0x1b80, 0x400900e5, + 0x1b80, 0x400900e7, + 0x1b80, 0xe02700f5, + 0x1b80, 0xe02700f7, + 0x1b80, 0x4b050105, + 0x1b80, 0x4b050107, + 0x1b80, 0x87030115, + 0x1b80, 0x87030117, + 0x1b80, 0x400b0125, + 0x1b80, 0x400b0127, + 0x1b80, 0xe0270135, + 0x1b80, 0xe0270137, + 0x1b80, 0x4b060145, + 0x1b80, 0x4b060147, + 0x1b80, 0x88030155, + 0x1b80, 0x88030157, + 0x1b80, 0x400d0165, + 0x1b80, 0x400d0167, + 0x1b80, 0xe0270175, + 0x1b80, 0xe0270177, + 0x1b80, 0x4b000185, + 0x1b80, 0x4b000187, + 0x1b80, 0x00070195, + 0x1b80, 0x00070197, + 0x1b80, 0x4c0001a5, + 0x1b80, 0x4c0001a7, + 0x1b80, 0x000401b5, + 0x1b80, 0x000401b7, + 0x1b80, 0x400801c5, + 0x1b80, 0x400801c7, + 0x1b80, 0x505501d5, + 0x1b80, 0x505501d7, + 0x1b80, 0x090a01e5, + 0x1b80, 0x090a01e7, + 0x1b80, 0x0ffe01f5, + 0x1b80, 0x0ffe01f7, + 0x1b80, 0x00220205, + 0x1b80, 0x00220207, + 0x1b80, 0x00040215, + 0x1b80, 0x00040217, + 0x1b80, 0x05c00225, + 0x1b80, 0x05c00227, + 0x1b80, 0x00070235, + 0x1b80, 0x00070237, + 0x1b80, 0x64000245, + 0x1b80, 0x64000247, + 0x1b80, 0x00020255, + 0x1b80, 0x00020257, + 0x1b80, 0x30000265, + 0x1b80, 0x30000267, + 0x1b80, 0xa5100275, + 0x1b80, 0xa5100277, + 0x1b80, 0xe3520285, + 0x1b80, 0xe3520287, + 0x1b80, 0xf01d0295, + 0x1b80, 0xf01d0297, + 0x1b80, 0xf11d02a5, + 0x1b80, 0xf11d02a7, + 0x1b80, 0xf21d02b5, + 0x1b80, 0xf21d02b7, + 0x1b80, 0xf31d02c5, + 0x1b80, 0xf31d02c7, + 0x1b80, 0xf41d02d5, + 0x1b80, 0xf41d02d7, + 0x1b80, 0xf51d02e5, + 0x1b80, 0xf51d02e7, + 0x1b80, 0xf61d02f5, + 0x1b80, 0xf61d02f7, + 0x1b80, 0xf71d0305, + 0x1b80, 0xf71d0307, + 0x1b80, 0xf81d0315, + 0x1b80, 0xf81d0317, + 0x1b80, 0xf91d0325, + 0x1b80, 0xf91d0327, + 0x1b80, 0xfa1d0335, + 0x1b80, 0xfa1d0337, + 0x1b80, 0xfb1d0345, + 0x1b80, 0xfb1d0347, + 0x1b80, 0xfc1d0355, + 0x1b80, 0xfc1d0357, + 0x1b80, 0xfd1d0365, + 0x1b80, 0xfd1d0367, + 0x1b80, 0xf21d0375, + 0x1b80, 0xf21d0377, + 0x1b80, 0xf31d0385, + 0x1b80, 0xf31d0387, + 0x1b80, 0xf41d0395, + 0x1b80, 0xf41d0397, + 0x1b80, 0xf51d03a5, + 0x1b80, 0xf51d03a7, + 0x1b80, 0xf61d03b5, + 0x1b80, 0xf61d03b7, + 0x1b80, 0xf71d03c5, + 0x1b80, 0xf71d03c7, + 0x1b80, 0xf81d03d5, + 0x1b80, 0xf81d03d7, + 0x1b80, 0xf91d03e5, + 0x1b80, 0xf91d03e7, + 0x1b80, 0xfa1d03f5, + 0x1b80, 0xfa1d03f7, + 0x1b80, 0xfb1d0405, + 0x1b80, 0xfb1d0407, + 0x1b80, 0xfc1d0415, + 0x1b80, 0xfc1d0417, + 0x1b80, 0xfd1d0425, + 0x1b80, 0xfd1d0427, + 0x1b80, 0xfe1d0435, + 0x1b80, 0xfe1d0437, + 0x1b80, 0xff1d0445, + 0x1b80, 0xff1d0447, + 0x1b80, 0x00010455, + 0x1b80, 0x00010457, + 0x1b80, 0x30620465, + 0x1b80, 0x30620467, + 0x1b80, 0x307a0475, + 0x1b80, 0x307a0477, + 0x1b80, 0x307c0485, + 0x1b80, 0x307c0487, + 0x1b80, 0x30eb0495, + 0x1b80, 0x30eb0497, + 0x1b80, 0x308004a5, + 0x1b80, 0x308004a7, + 0x1b80, 0x308c04b5, + 0x1b80, 0x308c04b7, + 0x1b80, 0x309804c5, + 0x1b80, 0x309804c7, + 0x1b80, 0x307f04d5, + 0x1b80, 0x307f04d7, + 0x1b80, 0x308b04e5, + 0x1b80, 0x308b04e7, + 0x1b80, 0x309704f5, + 0x1b80, 0x309704f7, + 0x1b80, 0x30ef0505, + 0x1b80, 0x30ef0507, + 0x1b80, 0x30fa0515, + 0x1b80, 0x30fa0517, + 0x1b80, 0x31050525, + 0x1b80, 0x31050527, + 0x1b80, 0x316a0535, + 0x1b80, 0x316a0537, + 0x1b80, 0x307a0545, + 0x1b80, 0x307a0547, + 0x1b80, 0x30e90555, + 0x1b80, 0x30e90557, + 0x1b80, 0x31870565, + 0x1b80, 0x31870567, + 0x1b80, 0x31a00575, + 0x1b80, 0x31a00577, + 0x1b80, 0x31ba0585, + 0x1b80, 0x31ba0587, + 0x1b80, 0x31c20595, + 0x1b80, 0x31c20597, + 0x1b80, 0x31ca05a5, + 0x1b80, 0x31ca05a7, + 0x1b80, 0x31d205b5, + 0x1b80, 0x31d205b7, + 0x1b80, 0x31da05c5, + 0x1b80, 0x31da05c7, + 0x1b80, 0x31e905d5, + 0x1b80, 0x31e905d7, + 0x1b80, 0x31f805e5, + 0x1b80, 0x31f805e7, + 0x1b80, 0x31fe05f5, + 0x1b80, 0x31fe05f7, + 0x1b80, 0x32040605, + 0x1b80, 0x32040607, + 0x1b80, 0x320a0615, + 0x1b80, 0x320a0617, + 0x1b80, 0xe2eb0625, + 0x1b80, 0xe2eb0627, + 0x1b80, 0x4d040635, + 0x1b80, 0x4d040637, + 0x1b80, 0x20800645, + 0x1b80, 0x20800647, + 0x1b80, 0x00000655, + 0x1b80, 0x00000657, + 0x1b80, 0x4d000665, + 0x1b80, 0x4d000667, + 0x1b80, 0x55070675, + 0x1b80, 0x55070677, + 0x1b80, 0xe2e30685, + 0x1b80, 0xe2e30687, + 0x1b80, 0xe2e30695, + 0x1b80, 0xe2e30697, + 0x1b80, 0x4d0406a5, + 0x1b80, 0x4d0406a7, + 0x1b80, 0x208806b5, + 0x1b80, 0x208806b7, + 0x1b80, 0x020006c5, + 0x1b80, 0x020006c7, + 0x1b80, 0x4d0006d5, + 0x1b80, 0x4d0006d7, + 0x1b80, 0x550f06e5, + 0x1b80, 0x550f06e7, + 0x1b80, 0xe2e306f5, + 0x1b80, 0xe2e306f7, + 0x1b80, 0x4f020705, + 0x1b80, 0x4f020707, + 0x1b80, 0x4e000715, + 0x1b80, 0x4e000717, + 0x1b80, 0x53020725, + 0x1b80, 0x53020727, + 0x1b80, 0x52010735, + 0x1b80, 0x52010737, + 0x1b80, 0xe2e70745, + 0x1b80, 0xe2e70747, + 0x1b80, 0x4d080755, + 0x1b80, 0x4d080757, + 0x1b80, 0x57100765, + 0x1b80, 0x57100767, + 0x1b80, 0x57000775, + 0x1b80, 0x57000777, + 0x1b80, 0x4d000785, + 0x1b80, 0x4d000787, + 0x1b80, 0x00010795, + 0x1b80, 0x00010797, + 0x1b80, 0xe2eb07a5, + 0x1b80, 0xe2eb07a7, + 0x1b80, 0x000107b5, + 0x1b80, 0x000107b7, + 0x1b80, 0x620607c5, + 0x1b80, 0x620607c7, + 0x1b80, 0xe2eb07d5, + 0x1b80, 0xe2eb07d7, + 0x1b80, 0x000107e5, + 0x1b80, 0x000107e7, + 0x1b80, 0x620607f5, + 0x1b80, 0x620607f7, + 0x1b80, 0x30ad0805, + 0x1b80, 0x30ad0807, + 0x1b80, 0x00260815, + 0x1b80, 0x00260817, + 0x1b80, 0xe3450825, + 0x1b80, 0xe3450827, + 0x1b80, 0x00020835, + 0x1b80, 0x00020837, + 0x1b80, 0x54ec0845, + 0x1b80, 0x54ec0847, + 0x1b80, 0x0ba60855, + 0x1b80, 0x0ba60857, + 0x1b80, 0x00260865, + 0x1b80, 0x00260867, + 0x1b80, 0xe3450875, + 0x1b80, 0xe3450877, + 0x1b80, 0x00020885, + 0x1b80, 0x00020887, + 0x1b80, 0x63c30895, + 0x1b80, 0x63c30897, + 0x1b80, 0x30d908a5, + 0x1b80, 0x30d908a7, + 0x1b80, 0x620608b5, + 0x1b80, 0x620608b7, + 0x1b80, 0x30a508c5, + 0x1b80, 0x30a508c7, + 0x1b80, 0x002408d5, + 0x1b80, 0x002408d7, + 0x1b80, 0xe34508e5, + 0x1b80, 0xe34508e7, + 0x1b80, 0x000208f5, + 0x1b80, 0x000208f7, + 0x1b80, 0x54ea0905, + 0x1b80, 0x54ea0907, + 0x1b80, 0x0ba60915, + 0x1b80, 0x0ba60917, + 0x1b80, 0x00240925, + 0x1b80, 0x00240927, + 0x1b80, 0xe3450935, + 0x1b80, 0xe3450937, + 0x1b80, 0x00020945, + 0x1b80, 0x00020947, + 0x1b80, 0x63c30955, + 0x1b80, 0x63c30957, + 0x1b80, 0x30d90965, + 0x1b80, 0x30d90967, + 0x1b80, 0x62060975, + 0x1b80, 0x62060977, + 0x1b80, 0x6c100985, + 0x1b80, 0x6c100987, + 0x1b80, 0x6d0f0995, + 0x1b80, 0x6d0f0997, + 0x1b80, 0xe2eb09a5, + 0x1b80, 0xe2eb09a7, + 0x1b80, 0xe34509b5, + 0x1b80, 0xe34509b7, + 0x1b80, 0x6c2409c5, + 0x1b80, 0x6c2409c7, + 0x1b80, 0xe2eb09d5, + 0x1b80, 0xe2eb09d7, + 0x1b80, 0xe34509e5, + 0x1b80, 0xe34509e7, + 0x1b80, 0x6c4409f5, + 0x1b80, 0x6c4409f7, + 0x1b80, 0xe2eb0a05, + 0x1b80, 0xe2eb0a07, + 0x1b80, 0xe3450a15, + 0x1b80, 0xe3450a17, + 0x1b80, 0x6c640a25, + 0x1b80, 0x6c640a27, + 0x1b80, 0xe2eb0a35, + 0x1b80, 0xe2eb0a37, + 0x1b80, 0xe3450a45, + 0x1b80, 0xe3450a47, + 0x1b80, 0x0baa0a55, + 0x1b80, 0x0baa0a57, + 0x1b80, 0x6c840a65, + 0x1b80, 0x6c840a67, + 0x1b80, 0x6d0f0a75, + 0x1b80, 0x6d0f0a77, + 0x1b80, 0xe2eb0a85, + 0x1b80, 0xe2eb0a87, + 0x1b80, 0xe3450a95, + 0x1b80, 0xe3450a97, + 0x1b80, 0x6ca40aa5, + 0x1b80, 0x6ca40aa7, + 0x1b80, 0xe2eb0ab5, + 0x1b80, 0xe2eb0ab7, + 0x1b80, 0xe3450ac5, + 0x1b80, 0xe3450ac7, + 0x1b80, 0x0bac0ad5, + 0x1b80, 0x0bac0ad7, + 0x1b80, 0x6cc40ae5, + 0x1b80, 0x6cc40ae7, + 0x1b80, 0x6d0f0af5, + 0x1b80, 0x6d0f0af7, + 0x1b80, 0xe2eb0b05, + 0x1b80, 0xe2eb0b07, + 0x1b80, 0xe3450b15, + 0x1b80, 0xe3450b17, + 0x1b80, 0x6ce40b25, + 0x1b80, 0x6ce40b27, + 0x1b80, 0xe2eb0b35, + 0x1b80, 0xe2eb0b37, + 0x1b80, 0xe3450b45, + 0x1b80, 0xe3450b47, + 0x1b80, 0x6cf40b55, + 0x1b80, 0x6cf40b57, + 0x1b80, 0xe2eb0b65, + 0x1b80, 0xe2eb0b67, + 0x1b80, 0xe3450b75, + 0x1b80, 0xe3450b77, + 0x1b80, 0x6c0c0b85, + 0x1b80, 0x6c0c0b87, + 0x1b80, 0x6d000b95, + 0x1b80, 0x6d000b97, + 0x1b80, 0xe2eb0ba5, + 0x1b80, 0xe2eb0ba7, + 0x1b80, 0xe3450bb5, + 0x1b80, 0xe3450bb7, + 0x1b80, 0x6c1c0bc5, + 0x1b80, 0x6c1c0bc7, + 0x1b80, 0xe2eb0bd5, + 0x1b80, 0xe2eb0bd7, + 0x1b80, 0xe3450be5, + 0x1b80, 0xe3450be7, + 0x1b80, 0x6c3c0bf5, + 0x1b80, 0x6c3c0bf7, + 0x1b80, 0xe2eb0c05, + 0x1b80, 0xe2eb0c07, + 0x1b80, 0xe3450c15, + 0x1b80, 0xe3450c17, + 0x1b80, 0xf4bf0c25, + 0x1b80, 0xf4bf0c27, + 0x1b80, 0xf7be0c35, + 0x1b80, 0xf7be0c37, + 0x1b80, 0x6c5c0c45, + 0x1b80, 0x6c5c0c47, + 0x1b80, 0xe2eb0c55, + 0x1b80, 0xe2eb0c57, + 0x1b80, 0xe3450c65, + 0x1b80, 0xe3450c67, + 0x1b80, 0x6c7c0c75, + 0x1b80, 0x6c7c0c77, + 0x1b80, 0xe2eb0c85, + 0x1b80, 0xe2eb0c87, + 0x1b80, 0xe3450c95, + 0x1b80, 0xe3450c97, + 0x1b80, 0xf5c30ca5, + 0x1b80, 0xf5c30ca7, + 0x1b80, 0xf8c20cb5, + 0x1b80, 0xf8c20cb7, + 0x1b80, 0x6c9c0cc5, + 0x1b80, 0x6c9c0cc7, + 0x1b80, 0xe2eb0cd5, + 0x1b80, 0xe2eb0cd7, + 0x1b80, 0xe3450ce5, + 0x1b80, 0xe3450ce7, + 0x1b80, 0x6cbc0cf5, + 0x1b80, 0x6cbc0cf7, + 0x1b80, 0xe2eb0d05, + 0x1b80, 0xe2eb0d07, + 0x1b80, 0xe3450d15, + 0x1b80, 0xe3450d17, + 0x1b80, 0x6cdc0d25, + 0x1b80, 0x6cdc0d27, + 0x1b80, 0xe2eb0d35, + 0x1b80, 0xe2eb0d37, + 0x1b80, 0xe3450d45, + 0x1b80, 0xe3450d47, + 0x1b80, 0x6cf00d55, + 0x1b80, 0x6cf00d57, + 0x1b80, 0xe2eb0d65, + 0x1b80, 0xe2eb0d67, + 0x1b80, 0xe3450d75, + 0x1b80, 0xe3450d77, + 0x1b80, 0x63c30d85, + 0x1b80, 0x63c30d87, + 0x1b80, 0x55010d95, + 0x1b80, 0x55010d97, + 0x1b80, 0x57040da5, + 0x1b80, 0x57040da7, + 0x1b80, 0x57000db5, + 0x1b80, 0x57000db7, + 0x1b80, 0x96000dc5, + 0x1b80, 0x96000dc7, + 0x1b80, 0x57080dd5, + 0x1b80, 0x57080dd7, + 0x1b80, 0x57000de5, + 0x1b80, 0x57000de7, + 0x1b80, 0x95000df5, + 0x1b80, 0x95000df7, + 0x1b80, 0x4d000e05, + 0x1b80, 0x4d000e07, + 0x1b80, 0x63050e15, + 0x1b80, 0x63050e17, + 0x1b80, 0x7b400e25, + 0x1b80, 0x7b400e27, + 0x1b80, 0x7a000e35, + 0x1b80, 0x7a000e37, + 0x1b80, 0x79000e45, + 0x1b80, 0x79000e47, + 0x1b80, 0x7f400e55, + 0x1b80, 0x7f400e57, + 0x1b80, 0x7e000e65, + 0x1b80, 0x7e000e67, + 0x1b80, 0x7d000e75, + 0x1b80, 0x7d000e77, + 0x1b80, 0x00010e85, + 0x1b80, 0x00010e87, + 0x1b80, 0xe3170e95, + 0x1b80, 0xe3170e97, + 0x1b80, 0x00010ea5, + 0x1b80, 0x00010ea7, + 0x1b80, 0x5c320eb5, + 0x1b80, 0x5c320eb7, + 0x1b80, 0xe3410ec5, + 0x1b80, 0xe3410ec7, + 0x1b80, 0xe3170ed5, + 0x1b80, 0xe3170ed7, + 0x1b80, 0x00010ee5, + 0x1b80, 0x00010ee7, + 0x1b80, 0x31260ef5, + 0x1b80, 0x31260ef7, + 0x1b80, 0x00260f05, + 0x1b80, 0x00260f07, + 0x1b80, 0xe34a0f15, + 0x1b80, 0xe34a0f17, + 0x1b80, 0x00020f25, + 0x1b80, 0x00020f27, + 0x1b80, 0x54ec0f35, + 0x1b80, 0x54ec0f37, + 0x1b80, 0x0ba60f45, + 0x1b80, 0x0ba60f47, + 0x1b80, 0x00260f55, + 0x1b80, 0x00260f57, + 0x1b80, 0xe34a0f65, + 0x1b80, 0xe34a0f67, + 0x1b80, 0x00020f75, + 0x1b80, 0x00020f77, + 0x1b80, 0x63830f85, + 0x1b80, 0x63830f87, + 0x1b80, 0x30d90f95, + 0x1b80, 0x30d90f97, + 0x1b80, 0x311a0fa5, + 0x1b80, 0x311a0fa7, + 0x1b80, 0x00240fb5, + 0x1b80, 0x00240fb7, + 0x1b80, 0xe34a0fc5, + 0x1b80, 0xe34a0fc7, + 0x1b80, 0x00020fd5, + 0x1b80, 0x00020fd7, + 0x1b80, 0x54ea0fe5, + 0x1b80, 0x54ea0fe7, + 0x1b80, 0x0ba60ff5, + 0x1b80, 0x0ba60ff7, + 0x1b80, 0x00241005, + 0x1b80, 0x00241007, + 0x1b80, 0xe34a1015, + 0x1b80, 0xe34a1017, + 0x1b80, 0x00021025, + 0x1b80, 0x00021027, + 0x1b80, 0x63831035, + 0x1b80, 0x63831037, + 0x1b80, 0x30d91045, + 0x1b80, 0x30d91047, + 0x1b80, 0x5c321055, + 0x1b80, 0x5c321057, + 0x1b80, 0x54e61065, + 0x1b80, 0x54e61067, + 0x1b80, 0x6e101075, + 0x1b80, 0x6e101077, + 0x1b80, 0x6f0f1085, + 0x1b80, 0x6f0f1087, + 0x1b80, 0xe3171095, + 0x1b80, 0xe3171097, + 0x1b80, 0xe34a10a5, + 0x1b80, 0xe34a10a7, + 0x1b80, 0x5c3210b5, + 0x1b80, 0x5c3210b7, + 0x1b80, 0x54e710c5, + 0x1b80, 0x54e710c7, + 0x1b80, 0x6e2410d5, + 0x1b80, 0x6e2410d7, + 0x1b80, 0xe31710e5, + 0x1b80, 0xe31710e7, + 0x1b80, 0xe34a10f5, + 0x1b80, 0xe34a10f7, + 0x1b80, 0x5c321105, + 0x1b80, 0x5c321107, + 0x1b80, 0x54e81115, + 0x1b80, 0x54e81117, + 0x1b80, 0x6e441125, + 0x1b80, 0x6e441127, + 0x1b80, 0xe3171135, + 0x1b80, 0xe3171137, + 0x1b80, 0xe34a1145, + 0x1b80, 0xe34a1147, + 0x1b80, 0x5c321155, + 0x1b80, 0x5c321157, + 0x1b80, 0x54e91165, + 0x1b80, 0x54e91167, + 0x1b80, 0x6e641175, + 0x1b80, 0x6e641177, + 0x1b80, 0xe3171185, + 0x1b80, 0xe3171187, + 0x1b80, 0xe34a1195, + 0x1b80, 0xe34a1197, + 0x1b80, 0x5c3211a5, + 0x1b80, 0x5c3211a7, + 0x1b80, 0x54ea11b5, + 0x1b80, 0x54ea11b7, + 0x1b80, 0x0baa11c5, + 0x1b80, 0x0baa11c7, + 0x1b80, 0x6e8411d5, + 0x1b80, 0x6e8411d7, + 0x1b80, 0x6f0f11e5, + 0x1b80, 0x6f0f11e7, + 0x1b80, 0xe31711f5, + 0x1b80, 0xe31711f7, + 0x1b80, 0xe34a1205, + 0x1b80, 0xe34a1207, + 0x1b80, 0x5c321215, + 0x1b80, 0x5c321217, + 0x1b80, 0x54eb1225, + 0x1b80, 0x54eb1227, + 0x1b80, 0x6ea41235, + 0x1b80, 0x6ea41237, + 0x1b80, 0xe3171245, + 0x1b80, 0xe3171247, + 0x1b80, 0xe34a1255, + 0x1b80, 0xe34a1257, + 0x1b80, 0x5c321265, + 0x1b80, 0x5c321267, + 0x1b80, 0x54ec1275, + 0x1b80, 0x54ec1277, + 0x1b80, 0x0bac1285, + 0x1b80, 0x0bac1287, + 0x1b80, 0x6ec41295, + 0x1b80, 0x6ec41297, + 0x1b80, 0x6f0f12a5, + 0x1b80, 0x6f0f12a7, + 0x1b80, 0xe31712b5, + 0x1b80, 0xe31712b7, + 0x1b80, 0xe34a12c5, + 0x1b80, 0xe34a12c7, + 0x1b80, 0x5c3212d5, + 0x1b80, 0x5c3212d7, + 0x1b80, 0x54ed12e5, + 0x1b80, 0x54ed12e7, + 0x1b80, 0x6ee412f5, + 0x1b80, 0x6ee412f7, + 0x1b80, 0xe3171305, + 0x1b80, 0xe3171307, + 0x1b80, 0xe34a1315, + 0x1b80, 0xe34a1317, + 0x1b80, 0x5c321325, + 0x1b80, 0x5c321327, + 0x1b80, 0x54ee1335, + 0x1b80, 0x54ee1337, + 0x1b80, 0x6ef41345, + 0x1b80, 0x6ef41347, + 0x1b80, 0xe3171355, + 0x1b80, 0xe3171357, + 0x1b80, 0xe34a1365, + 0x1b80, 0xe34a1367, + 0x1b80, 0x5c321375, + 0x1b80, 0x5c321377, + 0x1b80, 0x54ef1385, + 0x1b80, 0x54ef1387, + 0x1b80, 0x6e0c1395, + 0x1b80, 0x6e0c1397, + 0x1b80, 0x6f0013a5, + 0x1b80, 0x6f0013a7, + 0x1b80, 0xe31713b5, + 0x1b80, 0xe31713b7, + 0x1b80, 0xe34a13c5, + 0x1b80, 0xe34a13c7, + 0x1b80, 0x5c3213d5, + 0x1b80, 0x5c3213d7, + 0x1b80, 0x54f013e5, + 0x1b80, 0x54f013e7, + 0x1b80, 0x6e1c13f5, + 0x1b80, 0x6e1c13f7, + 0x1b80, 0xe3171405, + 0x1b80, 0xe3171407, + 0x1b80, 0xe34a1415, + 0x1b80, 0xe34a1417, + 0x1b80, 0x5c321425, + 0x1b80, 0x5c321427, + 0x1b80, 0x54f11435, + 0x1b80, 0x54f11437, + 0x1b80, 0x6e3c1445, + 0x1b80, 0x6e3c1447, + 0x1b80, 0xe3171455, + 0x1b80, 0xe3171457, + 0x1b80, 0xe34a1465, + 0x1b80, 0xe34a1467, + 0x1b80, 0xfaa91475, + 0x1b80, 0xfaa91477, + 0x1b80, 0x5c321485, + 0x1b80, 0x5c321487, + 0x1b80, 0x54f21495, + 0x1b80, 0x54f21497, + 0x1b80, 0x6e5c14a5, + 0x1b80, 0x6e5c14a7, + 0x1b80, 0xe31714b5, + 0x1b80, 0xe31714b7, + 0x1b80, 0xe34a14c5, + 0x1b80, 0xe34a14c7, + 0x1b80, 0x5c3214d5, + 0x1b80, 0x5c3214d7, + 0x1b80, 0x54f314e5, + 0x1b80, 0x54f314e7, + 0x1b80, 0x6e7c14f5, + 0x1b80, 0x6e7c14f7, + 0x1b80, 0xe3171505, + 0x1b80, 0xe3171507, + 0x1b80, 0xe34a1515, + 0x1b80, 0xe34a1517, + 0x1b80, 0xfba91525, + 0x1b80, 0xfba91527, + 0x1b80, 0x5c321535, + 0x1b80, 0x5c321537, + 0x1b80, 0x54f41545, + 0x1b80, 0x54f41547, + 0x1b80, 0x6e9c1555, + 0x1b80, 0x6e9c1557, + 0x1b80, 0xe3171565, + 0x1b80, 0xe3171567, + 0x1b80, 0xe34a1575, + 0x1b80, 0xe34a1577, + 0x1b80, 0x5c321585, + 0x1b80, 0x5c321587, + 0x1b80, 0x54f51595, + 0x1b80, 0x54f51597, + 0x1b80, 0x6ebc15a5, + 0x1b80, 0x6ebc15a7, + 0x1b80, 0xe31715b5, + 0x1b80, 0xe31715b7, + 0x1b80, 0xe34a15c5, + 0x1b80, 0xe34a15c7, + 0x1b80, 0x5c3215d5, + 0x1b80, 0x5c3215d7, + 0x1b80, 0x54f615e5, + 0x1b80, 0x54f615e7, + 0x1b80, 0x6edc15f5, + 0x1b80, 0x6edc15f7, + 0x1b80, 0xe3171605, + 0x1b80, 0xe3171607, + 0x1b80, 0xe34a1615, + 0x1b80, 0xe34a1617, + 0x1b80, 0x5c321625, + 0x1b80, 0x5c321627, + 0x1b80, 0x54f71635, + 0x1b80, 0x54f71637, + 0x1b80, 0x6ef01645, + 0x1b80, 0x6ef01647, + 0x1b80, 0xe3171655, + 0x1b80, 0xe3171657, + 0x1b80, 0xe34a1665, + 0x1b80, 0xe34a1667, + 0x1b80, 0x63831675, + 0x1b80, 0x63831677, + 0x1b80, 0x30d91685, + 0x1b80, 0x30d91687, + 0x1b80, 0x00011695, + 0x1b80, 0x00011697, + 0x1b80, 0x000416a5, + 0x1b80, 0x000416a7, + 0x1b80, 0x550116b5, + 0x1b80, 0x550116b7, + 0x1b80, 0x5c3116c5, + 0x1b80, 0x5c3116c7, + 0x1b80, 0x5f8216d5, + 0x1b80, 0x5f8216d7, + 0x1b80, 0x660516e5, + 0x1b80, 0x660516e7, + 0x1b80, 0x000616f5, + 0x1b80, 0x000616f7, + 0x1b80, 0x5d801705, + 0x1b80, 0x5d801707, + 0x1b80, 0x09001715, + 0x1b80, 0x09001717, + 0x1b80, 0x0a011725, + 0x1b80, 0x0a011727, + 0x1b80, 0x0b401735, + 0x1b80, 0x0b401737, + 0x1b80, 0x0d001745, + 0x1b80, 0x0d001747, + 0x1b80, 0x0f011755, + 0x1b80, 0x0f011757, + 0x1b80, 0x002a1765, + 0x1b80, 0x002a1767, + 0x1b80, 0x055a1775, + 0x1b80, 0x055a1777, + 0x1b80, 0x05db1785, + 0x1b80, 0x05db1787, + 0x1b80, 0xe3351795, + 0x1b80, 0xe3351797, + 0x1b80, 0xe2e317a5, + 0x1b80, 0xe2e317a7, + 0x1b80, 0x000617b5, + 0x1b80, 0x000617b7, + 0x1b80, 0x06da17c5, + 0x1b80, 0x06da17c7, + 0x1b80, 0x07db17d5, + 0x1b80, 0x07db17d7, + 0x1b80, 0xe33517e5, + 0x1b80, 0xe33517e7, + 0x1b80, 0xe2e317f5, + 0x1b80, 0xe2e317f7, + 0x1b80, 0xe32c1805, + 0x1b80, 0xe32c1807, + 0x1b80, 0x00021815, + 0x1b80, 0x00021817, + 0x1b80, 0xe3311825, + 0x1b80, 0xe3311827, + 0x1b80, 0x5d001835, + 0x1b80, 0x5d001837, + 0x1b80, 0x00041845, + 0x1b80, 0x00041847, + 0x1b80, 0x5fa21855, + 0x1b80, 0x5fa21857, + 0x1b80, 0x00011865, + 0x1b80, 0x00011867, + 0x1b80, 0xe2571875, + 0x1b80, 0xe2571877, + 0x1b80, 0x74081885, + 0x1b80, 0x74081887, + 0x1b80, 0xe2a11895, + 0x1b80, 0xe2a11897, + 0x1b80, 0xe28318a5, + 0x1b80, 0xe28318a7, + 0x1b80, 0xe2c118b5, + 0x1b80, 0xe2c118b7, + 0x1b80, 0xb90018c5, + 0x1b80, 0xb90018c7, + 0x1b80, 0x990018d5, + 0x1b80, 0x990018d7, + 0x1b80, 0x000618e5, + 0x1b80, 0x000618e7, + 0x1b80, 0x770018f5, + 0x1b80, 0x770018f7, + 0x1b80, 0x00041905, + 0x1b80, 0x00041907, + 0x1b80, 0x49041915, + 0x1b80, 0x49041917, + 0x1b80, 0x4bb01925, + 0x1b80, 0x4bb01927, + 0x1b80, 0x00061935, + 0x1b80, 0x00061937, + 0x1b80, 0x75041945, + 0x1b80, 0x75041947, + 0x1b80, 0x77081955, + 0x1b80, 0x77081957, + 0x1b80, 0x00071965, + 0x1b80, 0x00071967, + 0x1b80, 0x77101975, + 0x1b80, 0x77101977, + 0x1b80, 0x00041985, + 0x1b80, 0x00041987, + 0x1b80, 0x44801995, + 0x1b80, 0x44801997, + 0x1b80, 0x45ff19a5, + 0x1b80, 0x45ff19a7, + 0x1b80, 0x463f19b5, + 0x1b80, 0x463f19b7, + 0x1b80, 0x473119c5, + 0x1b80, 0x473119c7, + 0x1b80, 0x400819d5, + 0x1b80, 0x400819d7, + 0x1b80, 0xe23e19e5, + 0x1b80, 0xe23e19e7, + 0x1b80, 0x000119f5, + 0x1b80, 0x000119f7, + 0x1b80, 0xe2571a05, + 0x1b80, 0xe2571a07, + 0x1b80, 0x74081a15, + 0x1b80, 0x74081a17, + 0x1b80, 0xe2b11a25, + 0x1b80, 0xe2b11a27, + 0x1b80, 0xe2831a35, + 0x1b80, 0xe2831a37, + 0x1b80, 0xe2c71a45, + 0x1b80, 0xe2c71a47, + 0x1b80, 0xb9001a55, + 0x1b80, 0xb9001a57, + 0x1b80, 0x99001a65, + 0x1b80, 0x99001a67, + 0x1b80, 0x00061a75, + 0x1b80, 0x00061a77, + 0x1b80, 0x77001a85, + 0x1b80, 0x77001a87, + 0x1b80, 0x00051a95, + 0x1b80, 0x00051a97, + 0x1b80, 0x61041aa5, + 0x1b80, 0x61041aa7, + 0x1b80, 0x63b01ab5, + 0x1b80, 0x63b01ab7, + 0x1b80, 0x00061ac5, + 0x1b80, 0x00061ac7, + 0x1b80, 0x75081ad5, + 0x1b80, 0x75081ad7, + 0x1b80, 0x77081ae5, + 0x1b80, 0x77081ae7, + 0x1b80, 0x00071af5, + 0x1b80, 0x00071af7, + 0x1b80, 0x77201b05, + 0x1b80, 0x77201b07, + 0x1b80, 0x00051b15, + 0x1b80, 0x00051b17, + 0x1b80, 0x5c801b25, + 0x1b80, 0x5c801b27, + 0x1b80, 0x5dff1b35, + 0x1b80, 0x5dff1b37, + 0x1b80, 0x5e3f1b45, + 0x1b80, 0x5e3f1b47, + 0x1b80, 0x5f311b55, + 0x1b80, 0x5f311b57, + 0x1b80, 0x00041b65, + 0x1b80, 0x00041b67, + 0x1b80, 0x400a1b75, + 0x1b80, 0x400a1b77, + 0x1b80, 0xe23e1b85, + 0x1b80, 0xe23e1b87, + 0x1b80, 0x00011b95, + 0x1b80, 0x00011b97, + 0x1b80, 0xe2571ba5, + 0x1b80, 0xe2571ba7, + 0x1b80, 0x74081bb5, + 0x1b80, 0x74081bb7, + 0x1b80, 0xe2a11bc5, + 0x1b80, 0xe2a11bc7, + 0x1b80, 0xe2831bd5, + 0x1b80, 0xe2831bd7, + 0x1b80, 0xe2c11be5, + 0x1b80, 0xe2c11be7, + 0x1b80, 0xe2cd1bf5, + 0x1b80, 0xe2cd1bf7, + 0x1b80, 0xe2101c05, + 0x1b80, 0xe2101c07, + 0x1b80, 0x00011c15, + 0x1b80, 0x00011c17, + 0x1b80, 0xe2571c25, + 0x1b80, 0xe2571c27, + 0x1b80, 0x74081c35, + 0x1b80, 0x74081c37, + 0x1b80, 0xe2b11c45, + 0x1b80, 0xe2b11c47, + 0x1b80, 0xe2831c55, + 0x1b80, 0xe2831c57, + 0x1b80, 0xe2c71c65, + 0x1b80, 0xe2c71c67, + 0x1b80, 0xe2cd1c75, + 0x1b80, 0xe2cd1c77, + 0x1b80, 0xe2261c85, + 0x1b80, 0xe2261c87, + 0x1b80, 0x00011c95, + 0x1b80, 0x00011c97, + 0x1b80, 0xe26d1ca5, + 0x1b80, 0xe26d1ca7, + 0x1b80, 0x74001cb5, + 0x1b80, 0x74001cb7, + 0x1b80, 0xe2a11cc5, + 0x1b80, 0xe2a11cc7, + 0x1b80, 0xe2921cd5, + 0x1b80, 0xe2921cd7, + 0x1b80, 0xe2c11ce5, + 0x1b80, 0xe2c11ce7, + 0x1b80, 0xe2cd1cf5, + 0x1b80, 0xe2cd1cf7, + 0x1b80, 0xe2101d05, + 0x1b80, 0xe2101d07, + 0x1b80, 0x00011d15, + 0x1b80, 0x00011d17, + 0x1b80, 0xe26d1d25, + 0x1b80, 0xe26d1d27, + 0x1b80, 0x74001d35, + 0x1b80, 0x74001d37, + 0x1b80, 0xe2b11d45, + 0x1b80, 0xe2b11d47, + 0x1b80, 0xe2921d55, + 0x1b80, 0xe2921d57, + 0x1b80, 0xe2c71d65, + 0x1b80, 0xe2c71d67, + 0x1b80, 0xe2cd1d75, + 0x1b80, 0xe2cd1d77, + 0x1b80, 0xe2261d85, + 0x1b80, 0xe2261d87, + 0x1b80, 0x00011d95, + 0x1b80, 0x00011d97, + 0x1b80, 0x00041da5, + 0x1b80, 0x00041da7, + 0x1b80, 0x445b1db5, + 0x1b80, 0x445b1db7, + 0x1b80, 0x47b01dc5, + 0x1b80, 0x47b01dc7, + 0x1b80, 0x47301dd5, + 0x1b80, 0x47301dd7, + 0x1b80, 0x47001de5, + 0x1b80, 0x47001de7, + 0x1b80, 0x00061df5, + 0x1b80, 0x00061df7, + 0x1b80, 0x77081e05, + 0x1b80, 0x77081e07, + 0x1b80, 0x00041e15, + 0x1b80, 0x00041e17, + 0x1b80, 0x49401e25, + 0x1b80, 0x49401e27, + 0x1b80, 0x4bb01e35, + 0x1b80, 0x4bb01e37, + 0x1b80, 0x00071e45, + 0x1b80, 0x00071e47, + 0x1b80, 0x54401e55, + 0x1b80, 0x54401e57, + 0x1b80, 0x00041e65, + 0x1b80, 0x00041e67, + 0x1b80, 0x40081e75, + 0x1b80, 0x40081e77, + 0x1b80, 0x00011e85, + 0x1b80, 0x00011e87, + 0x1b80, 0x00051e95, + 0x1b80, 0x00051e97, + 0x1b80, 0x5c5b1ea5, + 0x1b80, 0x5c5b1ea7, + 0x1b80, 0x5fb01eb5, + 0x1b80, 0x5fb01eb7, + 0x1b80, 0x5f301ec5, + 0x1b80, 0x5f301ec7, + 0x1b80, 0x5f001ed5, + 0x1b80, 0x5f001ed7, + 0x1b80, 0x00061ee5, + 0x1b80, 0x00061ee7, + 0x1b80, 0x77081ef5, + 0x1b80, 0x77081ef7, + 0x1b80, 0x00051f05, + 0x1b80, 0x00051f07, + 0x1b80, 0x61401f15, + 0x1b80, 0x61401f17, + 0x1b80, 0x63b01f25, + 0x1b80, 0x63b01f27, + 0x1b80, 0x00071f35, + 0x1b80, 0x00071f37, + 0x1b80, 0x54401f45, + 0x1b80, 0x54401f47, + 0x1b80, 0x00041f55, + 0x1b80, 0x00041f57, + 0x1b80, 0x40081f65, + 0x1b80, 0x40081f67, + 0x1b80, 0x00011f75, + 0x1b80, 0x00011f77, + 0x1b80, 0xe2571f85, + 0x1b80, 0xe2571f87, + 0x1b80, 0x74081f95, + 0x1b80, 0x74081f97, + 0x1b80, 0xe2a11fa5, + 0x1b80, 0xe2a11fa7, + 0x1b80, 0x00041fb5, + 0x1b80, 0x00041fb7, + 0x1b80, 0x40081fc5, + 0x1b80, 0x40081fc7, + 0x1b80, 0x00011fd5, + 0x1b80, 0x00011fd7, + 0x1b80, 0xe2571fe5, + 0x1b80, 0xe2571fe7, + 0x1b80, 0x74081ff5, + 0x1b80, 0x74081ff7, + 0x1b80, 0xe2b12005, + 0x1b80, 0xe2b12007, + 0x1b80, 0x00042015, + 0x1b80, 0x00042017, + 0x1b80, 0x40082025, + 0x1b80, 0x40082027, + 0x1b80, 0x00012035, + 0x1b80, 0x00012037, + 0x1b80, 0xe26d2045, + 0x1b80, 0xe26d2047, + 0x1b80, 0x74002055, + 0x1b80, 0x74002057, + 0x1b80, 0xe2a12065, + 0x1b80, 0xe2a12067, + 0x1b80, 0x00042075, + 0x1b80, 0x00042077, + 0x1b80, 0x40082085, + 0x1b80, 0x40082087, + 0x1b80, 0x00012095, + 0x1b80, 0x00012097, + 0x1b80, 0xe26d20a5, + 0x1b80, 0xe26d20a7, + 0x1b80, 0x740020b5, + 0x1b80, 0x740020b7, + 0x1b80, 0xe2b120c5, + 0x1b80, 0xe2b120c7, + 0x1b80, 0x000420d5, + 0x1b80, 0x000420d7, + 0x1b80, 0x400820e5, + 0x1b80, 0x400820e7, + 0x1b80, 0x000120f5, + 0x1b80, 0x000120f7, + 0x1b80, 0x00042105, + 0x1b80, 0x00042107, + 0x1b80, 0x49042115, + 0x1b80, 0x49042117, + 0x1b80, 0x4bb02125, + 0x1b80, 0x4bb02127, + 0x1b80, 0x00062135, + 0x1b80, 0x00062137, + 0x1b80, 0x75042145, + 0x1b80, 0x75042147, + 0x1b80, 0x77082155, + 0x1b80, 0x77082157, + 0x1b80, 0x00042165, + 0x1b80, 0x00042167, + 0x1b80, 0x44802175, + 0x1b80, 0x44802177, + 0x1b80, 0x45ff2185, + 0x1b80, 0x45ff2187, + 0x1b80, 0x463f2195, + 0x1b80, 0x463f2197, + 0x1b80, 0x473121a5, + 0x1b80, 0x473121a7, + 0x1b80, 0x400821b5, + 0x1b80, 0x400821b7, + 0x1b80, 0xe23e21c5, + 0x1b80, 0xe23e21c7, + 0x1b80, 0x000421d5, + 0x1b80, 0x000421d7, + 0x1b80, 0x400c21e5, + 0x1b80, 0x400c21e7, + 0x1b80, 0x000621f5, + 0x1b80, 0x000621f7, + 0x1b80, 0x75002205, + 0x1b80, 0x75002207, + 0x1b80, 0x00042215, + 0x1b80, 0x00042217, + 0x1b80, 0x445b2225, + 0x1b80, 0x445b2227, + 0x1b80, 0x47002235, + 0x1b80, 0x47002237, + 0x1b80, 0x40082245, + 0x1b80, 0x40082247, + 0x1b80, 0x00012255, + 0x1b80, 0x00012257, + 0x1b80, 0x00052265, + 0x1b80, 0x00052267, + 0x1b80, 0x61042275, + 0x1b80, 0x61042277, + 0x1b80, 0x63b02285, + 0x1b80, 0x63b02287, + 0x1b80, 0x00062295, + 0x1b80, 0x00062297, + 0x1b80, 0x750822a5, + 0x1b80, 0x750822a7, + 0x1b80, 0x770822b5, + 0x1b80, 0x770822b7, + 0x1b80, 0x000522c5, + 0x1b80, 0x000522c7, + 0x1b80, 0x5c8022d5, + 0x1b80, 0x5c8022d7, + 0x1b80, 0x5dff22e5, + 0x1b80, 0x5dff22e7, + 0x1b80, 0x5e3f22f5, + 0x1b80, 0x5e3f22f7, + 0x1b80, 0x5f312305, + 0x1b80, 0x5f312307, + 0x1b80, 0x00042315, + 0x1b80, 0x00042317, + 0x1b80, 0x400a2325, + 0x1b80, 0x400a2327, + 0x1b80, 0xe23e2335, + 0x1b80, 0xe23e2337, + 0x1b80, 0x00042345, + 0x1b80, 0x00042347, + 0x1b80, 0x400c2355, + 0x1b80, 0x400c2357, + 0x1b80, 0x00062365, + 0x1b80, 0x00062367, + 0x1b80, 0x75002375, + 0x1b80, 0x75002377, + 0x1b80, 0x00052385, + 0x1b80, 0x00052387, + 0x1b80, 0x5c5b2395, + 0x1b80, 0x5c5b2397, + 0x1b80, 0x5f0023a5, + 0x1b80, 0x5f0023a7, + 0x1b80, 0x000423b5, + 0x1b80, 0x000423b7, + 0x1b80, 0x400823c5, + 0x1b80, 0x400823c7, + 0x1b80, 0x000123d5, + 0x1b80, 0x000123d7, + 0x1b80, 0x000723e5, + 0x1b80, 0x000723e7, + 0x1b80, 0x4c1223f5, + 0x1b80, 0x4c1223f7, + 0x1b80, 0x4e202405, + 0x1b80, 0x4e202407, + 0x1b80, 0x00052415, + 0x1b80, 0x00052417, + 0x1b80, 0x598f2425, + 0x1b80, 0x598f2427, + 0x1b80, 0x40022435, + 0x1b80, 0x40022437, + 0x1b80, 0x4c012445, + 0x1b80, 0x4c012447, + 0x1b80, 0x4c002455, + 0x1b80, 0x4c002457, + 0x1b80, 0xab002465, + 0x1b80, 0xab002467, + 0x1b80, 0x40032475, + 0x1b80, 0x40032477, + 0x1b80, 0x49802485, + 0x1b80, 0x49802487, + 0x1b80, 0x56c02495, + 0x1b80, 0x56c02497, + 0x1b80, 0x540224a5, + 0x1b80, 0x540224a7, + 0x1b80, 0x4c0124b5, + 0x1b80, 0x4c0124b7, + 0x1b80, 0x4c0024c5, + 0x1b80, 0x4c0024c7, + 0x1b80, 0xab0024d5, + 0x1b80, 0xab0024d7, + 0x1b80, 0x540024e5, + 0x1b80, 0x540024e7, + 0x1b80, 0x000724f5, + 0x1b80, 0x000724f7, + 0x1b80, 0x4c002505, + 0x1b80, 0x4c002507, + 0x1b80, 0x4e002515, + 0x1b80, 0x4e002517, + 0x1b80, 0x00052525, + 0x1b80, 0x00052527, + 0x1b80, 0x40042535, + 0x1b80, 0x40042537, + 0x1b80, 0x4c012545, + 0x1b80, 0x4c012547, + 0x1b80, 0x4c002555, + 0x1b80, 0x4c002557, + 0x1b80, 0x00012565, + 0x1b80, 0x00012567, + 0x1b80, 0x00042575, + 0x1b80, 0x00042577, + 0x1b80, 0x44802585, + 0x1b80, 0x44802587, + 0x1b80, 0x4b002595, + 0x1b80, 0x4b002597, + 0x1b80, 0x000525a5, + 0x1b80, 0x000525a7, + 0x1b80, 0x5c8025b5, + 0x1b80, 0x5c8025b7, + 0x1b80, 0x630025c5, + 0x1b80, 0x630025c7, + 0x1b80, 0x000725d5, + 0x1b80, 0x000725d7, + 0x1b80, 0x780c25e5, + 0x1b80, 0x780c25e7, + 0x1b80, 0x791925f5, + 0x1b80, 0x791925f7, + 0x1b80, 0x7a002605, + 0x1b80, 0x7a002607, + 0x1b80, 0x7b822615, + 0x1b80, 0x7b822617, + 0x1b80, 0x7b022625, + 0x1b80, 0x7b022627, + 0x1b80, 0x78142635, + 0x1b80, 0x78142637, + 0x1b80, 0x79ee2645, + 0x1b80, 0x79ee2647, + 0x1b80, 0x7a012655, + 0x1b80, 0x7a012657, + 0x1b80, 0x7b832665, + 0x1b80, 0x7b832667, + 0x1b80, 0x7b032675, + 0x1b80, 0x7b032677, + 0x1b80, 0x78282685, + 0x1b80, 0x78282687, + 0x1b80, 0x79b42695, + 0x1b80, 0x79b42697, + 0x1b80, 0x7a0026a5, + 0x1b80, 0x7a0026a7, + 0x1b80, 0x7b0026b5, + 0x1b80, 0x7b0026b7, + 0x1b80, 0x000126c5, + 0x1b80, 0x000126c7, + 0x1b80, 0x000426d5, + 0x1b80, 0x000426d7, + 0x1b80, 0x448026e5, + 0x1b80, 0x448026e7, + 0x1b80, 0x4b0026f5, + 0x1b80, 0x4b0026f7, + 0x1b80, 0x00052705, + 0x1b80, 0x00052707, + 0x1b80, 0x5c802715, + 0x1b80, 0x5c802717, + 0x1b80, 0x63002725, + 0x1b80, 0x63002727, + 0x1b80, 0x00072735, + 0x1b80, 0x00072737, + 0x1b80, 0x78102745, + 0x1b80, 0x78102747, + 0x1b80, 0x79132755, + 0x1b80, 0x79132757, + 0x1b80, 0x7a002765, + 0x1b80, 0x7a002767, + 0x1b80, 0x7b802775, + 0x1b80, 0x7b802777, + 0x1b80, 0x7b002785, + 0x1b80, 0x7b002787, + 0x1b80, 0x78db2795, + 0x1b80, 0x78db2797, + 0x1b80, 0x790027a5, + 0x1b80, 0x790027a7, + 0x1b80, 0x7a0027b5, + 0x1b80, 0x7a0027b7, + 0x1b80, 0x7b8127c5, + 0x1b80, 0x7b8127c7, + 0x1b80, 0x7b0127d5, + 0x1b80, 0x7b0127d7, + 0x1b80, 0x782827e5, + 0x1b80, 0x782827e7, + 0x1b80, 0x79b427f5, + 0x1b80, 0x79b427f7, + 0x1b80, 0x7a002805, + 0x1b80, 0x7a002807, + 0x1b80, 0x7b002815, + 0x1b80, 0x7b002817, + 0x1b80, 0x00012825, + 0x1b80, 0x00012827, + 0x1b80, 0x00072835, + 0x1b80, 0x00072837, + 0x1b80, 0x783e2845, + 0x1b80, 0x783e2847, + 0x1b80, 0x79f92855, + 0x1b80, 0x79f92857, + 0x1b80, 0x7a012865, + 0x1b80, 0x7a012867, + 0x1b80, 0x7b822875, + 0x1b80, 0x7b822877, + 0x1b80, 0x7b022885, + 0x1b80, 0x7b022887, + 0x1b80, 0x78a92895, + 0x1b80, 0x78a92897, + 0x1b80, 0x79ed28a5, + 0x1b80, 0x79ed28a7, + 0x1b80, 0x7b8328b5, + 0x1b80, 0x7b8328b7, + 0x1b80, 0x7b0328c5, + 0x1b80, 0x7b0328c7, + 0x1b80, 0x782828d5, + 0x1b80, 0x782828d7, + 0x1b80, 0x79b428e5, + 0x1b80, 0x79b428e7, + 0x1b80, 0x7a0028f5, + 0x1b80, 0x7a0028f7, + 0x1b80, 0x7b002905, + 0x1b80, 0x7b002907, + 0x1b80, 0x00012915, + 0x1b80, 0x00012917, + 0x1b80, 0x00072925, + 0x1b80, 0x00072927, + 0x1b80, 0x78ae2935, + 0x1b80, 0x78ae2937, + 0x1b80, 0x79fa2945, + 0x1b80, 0x79fa2947, + 0x1b80, 0x7a012955, + 0x1b80, 0x7a012957, + 0x1b80, 0x7b802965, + 0x1b80, 0x7b802967, + 0x1b80, 0x7b002975, + 0x1b80, 0x7b002977, + 0x1b80, 0x787a2985, + 0x1b80, 0x787a2987, + 0x1b80, 0x79f12995, + 0x1b80, 0x79f12997, + 0x1b80, 0x7b8129a5, + 0x1b80, 0x7b8129a7, + 0x1b80, 0x7b0129b5, + 0x1b80, 0x7b0129b7, + 0x1b80, 0x782829c5, + 0x1b80, 0x782829c7, + 0x1b80, 0x79b429d5, + 0x1b80, 0x79b429d7, + 0x1b80, 0x7a0029e5, + 0x1b80, 0x7a0029e7, + 0x1b80, 0x7b0029f5, + 0x1b80, 0x7b0029f7, + 0x1b80, 0x00012a05, + 0x1b80, 0x00012a07, + 0x1b80, 0x00072a15, + 0x1b80, 0x00072a17, + 0x1b80, 0x75002a25, + 0x1b80, 0x75002a27, + 0x1b80, 0x76022a35, + 0x1b80, 0x76022a37, + 0x1b80, 0x77152a45, + 0x1b80, 0x77152a47, + 0x1b80, 0x00062a55, + 0x1b80, 0x00062a57, + 0x1b80, 0x74002a65, + 0x1b80, 0x74002a67, + 0x1b80, 0x76002a75, + 0x1b80, 0x76002a77, + 0x1b80, 0x77002a85, + 0x1b80, 0x77002a87, + 0x1b80, 0x75102a95, + 0x1b80, 0x75102a97, + 0x1b80, 0x75002aa5, + 0x1b80, 0x75002aa7, + 0x1b80, 0xb3002ab5, + 0x1b80, 0xb3002ab7, + 0x1b80, 0x93002ac5, + 0x1b80, 0x93002ac7, + 0x1b80, 0x00072ad5, + 0x1b80, 0x00072ad7, + 0x1b80, 0x76002ae5, + 0x1b80, 0x76002ae7, + 0x1b80, 0x77002af5, + 0x1b80, 0x77002af7, + 0x1b80, 0x00012b05, + 0x1b80, 0x00012b07, + 0x1b80, 0x00072b15, + 0x1b80, 0x00072b17, + 0x1b80, 0x75002b25, + 0x1b80, 0x75002b27, + 0x1b80, 0x76022b35, + 0x1b80, 0x76022b37, + 0x1b80, 0x77252b45, + 0x1b80, 0x77252b47, + 0x1b80, 0x00062b55, + 0x1b80, 0x00062b57, + 0x1b80, 0x74002b65, + 0x1b80, 0x74002b67, + 0x1b80, 0x76002b75, + 0x1b80, 0x76002b77, + 0x1b80, 0x77012b85, + 0x1b80, 0x77012b87, + 0x1b80, 0x75102b95, + 0x1b80, 0x75102b97, + 0x1b80, 0x75002ba5, + 0x1b80, 0x75002ba7, + 0x1b80, 0xb3002bb5, + 0x1b80, 0xb3002bb7, + 0x1b80, 0x93002bc5, + 0x1b80, 0x93002bc7, + 0x1b80, 0x00072bd5, + 0x1b80, 0x00072bd7, + 0x1b80, 0x76002be5, + 0x1b80, 0x76002be7, + 0x1b80, 0x77002bf5, + 0x1b80, 0x77002bf7, + 0x1b80, 0x00012c05, + 0x1b80, 0x00012c07, + 0x1b80, 0x00042c15, + 0x1b80, 0x00042c17, + 0x1b80, 0x44802c25, + 0x1b80, 0x44802c27, + 0x1b80, 0x47302c35, + 0x1b80, 0x47302c37, + 0x1b80, 0x00062c45, + 0x1b80, 0x00062c47, + 0x1b80, 0x776c2c55, + 0x1b80, 0x776c2c57, + 0x1b80, 0x00012c65, + 0x1b80, 0x00012c67, + 0x1b80, 0x00052c75, + 0x1b80, 0x00052c77, + 0x1b80, 0x5c802c85, + 0x1b80, 0x5c802c87, + 0x1b80, 0x5f302c95, + 0x1b80, 0x5f302c97, + 0x1b80, 0x00062ca5, + 0x1b80, 0x00062ca7, + 0x1b80, 0x776d2cb5, + 0x1b80, 0x776d2cb7, + 0x1b80, 0x00012cc5, + 0x1b80, 0x00012cc7, + 0x1b80, 0xb9002cd5, + 0x1b80, 0xb9002cd7, + 0x1b80, 0x99002ce5, + 0x1b80, 0x99002ce7, + 0x1b80, 0x00062cf5, + 0x1b80, 0x00062cf7, + 0x1b80, 0x77002d05, + 0x1b80, 0x77002d07, + 0x1b80, 0x98052d15, + 0x1b80, 0x98052d17, + 0x1b80, 0x00042d25, + 0x1b80, 0x00042d27, + 0x1b80, 0x40082d35, + 0x1b80, 0x40082d37, + 0x1b80, 0x4a022d45, + 0x1b80, 0x4a022d47, + 0x1b80, 0x30192d55, + 0x1b80, 0x30192d57, + 0x1b80, 0x00012d65, + 0x1b80, 0x00012d67, + 0x1b80, 0x7b482d75, + 0x1b80, 0x7b482d77, + 0x1b80, 0x7a902d85, + 0x1b80, 0x7a902d87, + 0x1b80, 0x79002d95, + 0x1b80, 0x79002d97, + 0x1b80, 0x55032da5, + 0x1b80, 0x55032da7, + 0x1b80, 0x32e32db5, + 0x1b80, 0x32e32db7, + 0x1b80, 0x7b382dc5, + 0x1b80, 0x7b382dc7, + 0x1b80, 0x7a802dd5, + 0x1b80, 0x7a802dd7, + 0x1b80, 0x550b2de5, + 0x1b80, 0x550b2de7, + 0x1b80, 0x32e32df5, + 0x1b80, 0x32e32df7, + 0x1b80, 0x7b402e05, + 0x1b80, 0x7b402e07, + 0x1b80, 0x7a002e15, + 0x1b80, 0x7a002e17, + 0x1b80, 0x55132e25, + 0x1b80, 0x55132e27, + 0x1b80, 0x74012e35, + 0x1b80, 0x74012e37, + 0x1b80, 0x74002e45, + 0x1b80, 0x74002e47, + 0x1b80, 0x8e002e55, + 0x1b80, 0x8e002e57, + 0x1b80, 0x00012e65, + 0x1b80, 0x00012e67, + 0x1b80, 0x57022e75, + 0x1b80, 0x57022e77, + 0x1b80, 0x57002e85, + 0x1b80, 0x57002e87, + 0x1b80, 0x97002e95, + 0x1b80, 0x97002e97, + 0x1b80, 0x00012ea5, + 0x1b80, 0x00012ea7, + 0x1b80, 0x4f782eb5, + 0x1b80, 0x4f782eb7, + 0x1b80, 0x53882ec5, + 0x1b80, 0x53882ec7, + 0x1b80, 0xe2f72ed5, + 0x1b80, 0xe2f72ed7, + 0x1b80, 0x54802ee5, + 0x1b80, 0x54802ee7, + 0x1b80, 0x54002ef5, + 0x1b80, 0x54002ef7, + 0x1b80, 0x54812f05, + 0x1b80, 0x54812f07, + 0x1b80, 0x54002f15, + 0x1b80, 0x54002f17, + 0x1b80, 0x54822f25, + 0x1b80, 0x54822f27, + 0x1b80, 0x54002f35, + 0x1b80, 0x54002f37, + 0x1b80, 0xe3022f45, + 0x1b80, 0xe3022f47, + 0x1b80, 0xbf1d2f55, + 0x1b80, 0xbf1d2f57, + 0x1b80, 0x30192f65, + 0x1b80, 0x30192f67, + 0x1b80, 0xe2d72f75, + 0x1b80, 0xe2d72f77, + 0x1b80, 0xe2dc2f85, + 0x1b80, 0xe2dc2f87, + 0x1b80, 0xe2e02f95, + 0x1b80, 0xe2e02f97, + 0x1b80, 0xe2e72fa5, + 0x1b80, 0xe2e72fa7, + 0x1b80, 0xe3412fb5, + 0x1b80, 0xe3412fb7, + 0x1b80, 0x55132fc5, + 0x1b80, 0x55132fc7, + 0x1b80, 0xe2e32fd5, + 0x1b80, 0xe2e32fd7, + 0x1b80, 0x55152fe5, + 0x1b80, 0x55152fe7, + 0x1b80, 0xe2e72ff5, + 0x1b80, 0xe2e72ff7, + 0x1b80, 0xe3413005, + 0x1b80, 0xe3413007, + 0x1b80, 0x00013015, + 0x1b80, 0x00013017, + 0x1b80, 0x54bf3025, + 0x1b80, 0x54bf3027, + 0x1b80, 0x54c03035, + 0x1b80, 0x54c03037, + 0x1b80, 0x54a33045, + 0x1b80, 0x54a33047, + 0x1b80, 0x54c13055, + 0x1b80, 0x54c13057, + 0x1b80, 0x54a43065, + 0x1b80, 0x54a43067, + 0x1b80, 0x4c183075, + 0x1b80, 0x4c183077, + 0x1b80, 0xbf073085, + 0x1b80, 0xbf073087, + 0x1b80, 0x54c23095, + 0x1b80, 0x54c23097, + 0x1b80, 0x54a430a5, + 0x1b80, 0x54a430a7, + 0x1b80, 0xbf0430b5, + 0x1b80, 0xbf0430b7, + 0x1b80, 0x54c130c5, + 0x1b80, 0x54c130c7, + 0x1b80, 0x54a330d5, + 0x1b80, 0x54a330d7, + 0x1b80, 0xbf0130e5, + 0x1b80, 0xbf0130e7, + 0x1b80, 0xe34f30f5, + 0x1b80, 0xe34f30f7, + 0x1b80, 0x54df3105, + 0x1b80, 0x54df3107, + 0x1b80, 0x00013115, + 0x1b80, 0x00013117, + 0x1b80, 0x54bf3125, + 0x1b80, 0x54bf3127, + 0x1b80, 0x54e53135, + 0x1b80, 0x54e53137, + 0x1b80, 0x050a3145, + 0x1b80, 0x050a3147, + 0x1b80, 0x54df3155, + 0x1b80, 0x54df3157, + 0x1b80, 0x00013165, + 0x1b80, 0x00013167, + 0x1b80, 0x7f403175, + 0x1b80, 0x7f403177, + 0x1b80, 0x7e003185, + 0x1b80, 0x7e003187, + 0x1b80, 0x7d003195, + 0x1b80, 0x7d003197, + 0x1b80, 0x550131a5, + 0x1b80, 0x550131a7, + 0x1b80, 0x5c3131b5, + 0x1b80, 0x5c3131b7, + 0x1b80, 0xe2e331c5, + 0x1b80, 0xe2e331c7, + 0x1b80, 0xe2e731d5, + 0x1b80, 0xe2e731d7, + 0x1b80, 0x548031e5, + 0x1b80, 0x548031e7, + 0x1b80, 0x540031f5, + 0x1b80, 0x540031f7, + 0x1b80, 0x54813205, + 0x1b80, 0x54813207, + 0x1b80, 0x54003215, + 0x1b80, 0x54003217, + 0x1b80, 0x54823225, + 0x1b80, 0x54823227, + 0x1b80, 0x54003235, + 0x1b80, 0x54003237, + 0x1b80, 0xe3023245, + 0x1b80, 0xe3023247, + 0x1b80, 0xbfed3255, + 0x1b80, 0xbfed3257, + 0x1b80, 0x30193265, + 0x1b80, 0x30193267, + 0x1b80, 0x74023275, + 0x1b80, 0x74023277, + 0x1b80, 0x003f3285, + 0x1b80, 0x003f3287, + 0x1b80, 0x74003295, + 0x1b80, 0x74003297, + 0x1b80, 0x000232a5, + 0x1b80, 0x000232a7, + 0x1b80, 0x000132b5, + 0x1b80, 0x000132b7, + 0x1b80, 0x000632c5, + 0x1b80, 0x000632c7, + 0x1b80, 0x5a8032d5, + 0x1b80, 0x5a8032d7, + 0x1b80, 0x5a0032e5, + 0x1b80, 0x5a0032e7, + 0x1b80, 0x920032f5, + 0x1b80, 0x920032f7, + 0x1b80, 0x00013305, + 0x1b80, 0x00013307, + 0x1b80, 0x5b8f3315, + 0x1b80, 0x5b8f3317, + 0x1b80, 0x5b0f3325, + 0x1b80, 0x5b0f3327, + 0x1b80, 0x91003335, + 0x1b80, 0x91003337, + 0x1b80, 0x00013345, + 0x1b80, 0x00013347, + 0x1b80, 0x00063355, + 0x1b80, 0x00063357, + 0x1b80, 0x5d803365, + 0x1b80, 0x5d803367, + 0x1b80, 0x5e563375, + 0x1b80, 0x5e563377, + 0x1b80, 0x00043385, + 0x1b80, 0x00043387, + 0x1b80, 0x4d083395, + 0x1b80, 0x4d083397, + 0x1b80, 0x571033a5, + 0x1b80, 0x571033a7, + 0x1b80, 0x570033b5, + 0x1b80, 0x570033b7, + 0x1b80, 0x4d0033c5, + 0x1b80, 0x4d0033c7, + 0x1b80, 0x000633d5, + 0x1b80, 0x000633d7, + 0x1b80, 0x5d0033e5, + 0x1b80, 0x5d0033e7, + 0x1b80, 0x000433f5, + 0x1b80, 0x000433f7, + 0x1b80, 0x00013405, + 0x1b80, 0x00013407, + 0x1b80, 0x549f3415, + 0x1b80, 0x549f3417, + 0x1b80, 0x54ff3425, + 0x1b80, 0x54ff3427, + 0x1b80, 0x54003435, + 0x1b80, 0x54003437, + 0x1b80, 0x00013445, + 0x1b80, 0x00013447, + 0x1b80, 0x5c313455, + 0x1b80, 0x5c313457, + 0x1b80, 0x07143465, + 0x1b80, 0x07143467, + 0x1b80, 0x54003475, + 0x1b80, 0x54003477, + 0x1b80, 0x5c323485, + 0x1b80, 0x5c323487, + 0x1b80, 0x00013495, + 0x1b80, 0x00013497, + 0x1b80, 0x5c3234a5, + 0x1b80, 0x5c3234a7, + 0x1b80, 0x071434b5, + 0x1b80, 0x071434b7, + 0x1b80, 0x540034c5, + 0x1b80, 0x540034c7, + 0x1b80, 0x5c3134d5, + 0x1b80, 0x5c3134d7, + 0x1b80, 0x000134e5, + 0x1b80, 0x000134e7, + 0x1b80, 0x4c9834f5, + 0x1b80, 0x4c9834f7, + 0x1b80, 0x4c183505, + 0x1b80, 0x4c183507, + 0x1b80, 0x00013515, + 0x1b80, 0x00013517, + 0x1b80, 0x5c323525, + 0x1b80, 0x5c323527, + 0x1b80, 0x62043535, + 0x1b80, 0x62043537, + 0x1b80, 0x63033545, + 0x1b80, 0x63033547, + 0x1b80, 0x66073555, + 0x1b80, 0x66073557, + 0x1b80, 0x7b403565, + 0x1b80, 0x7b403567, + 0x1b80, 0x7a003575, + 0x1b80, 0x7a003577, + 0x1b80, 0x79003585, + 0x1b80, 0x79003587, + 0x1b80, 0x7f403595, + 0x1b80, 0x7f403597, + 0x1b80, 0x7e0035a5, + 0x1b80, 0x7e0035a7, + 0x1b80, 0x7d0035b5, + 0x1b80, 0x7d0035b7, + 0x1b80, 0x090135c5, + 0x1b80, 0x090135c7, + 0x1b80, 0x0c0135d5, + 0x1b80, 0x0c0135d7, + 0x1b80, 0x0ba635e5, + 0x1b80, 0x0ba635e7, + 0x1b80, 0x000135f5, + 0x1b80, 0x000135f7, + 0x1b80, 0x00000006, + 0x1b80, 0x00000002, +}; + +RTW_DECL_TABLE_PHY_COND(rtw8822c_array_mp_cal_init, rtw_phy_cfg_bb); diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c_table.h b/drivers/net/wireless/realtek/rtw88/rtw8822c_table.h index bb52227..e4d9f74 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c_table.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c_table.h @@ -12,5 +12,6 @@ extern const struct rtw_table rtw8822c_bb_pg_type0_tbl; extern const struct rtw_table rtw8822c_rf_a_tbl; extern const struct rtw_table rtw8822c_rf_b_tbl; extern const struct rtw_table rtw8822c_txpwr_lmt_type0_tbl; +extern const struct rtw_table rtw8822c_array_mp_cal_init_tbl; #endif From patchwork Thu Feb 14 08:58:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812075 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1CB9B1399 for ; Thu, 14 Feb 2019 08:59:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0BFD52D1F6 for ; Thu, 14 Feb 2019 08:59:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F16092D46D; Thu, 14 Feb 2019 08:59:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0BF1B2D1F6 for ; Thu, 14 Feb 2019 08:59:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733231AbfBNI7n (ORCPT ); Thu, 14 Feb 2019 03:59:43 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39605 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730758AbfBNI7l (ORCPT ); Thu, 14 Feb 2019 03:59:41 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xJfm005863, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xJfm005863 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:19 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:19 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 10/24] rtw88: 8822c: update channel setting Date: Thu, 14 Feb 2019 16:58:49 +0800 Message-ID: <1550134743-17443-11-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Chien-Hsun Liao Update BB and RF channel settings. The old settings are not compatible with most of the chips now. To swtich to a target channel correctly, many of the PHY parameters needs to be modified. For BB, the DAC clock setting, CCK tx filter coefficient and OFDM dfir should be updated in order to meet 802.11 standards of spectral mask. CCK trx settings should be modified based on different band, because the CCK signals are not allowed in 5G bands. For RF, subband setting should be corrected, ch-140 ~ ch-144 is in band-3 instead of band-4. Also rx amplifier should be set to different values in different bandwidth, otherwise the rx sensitivity will degrade. Note the settings are based on phy parameter v27 table, should be applied together to make sure it work. Signed-off-by: Chien-Hsun Liao Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/reg.h | 1 + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 85 +++++++++++++++++---------- drivers/net/wireless/realtek/rtw88/rtw8822c.h | 15 +++-- 3 files changed, 67 insertions(+), 34 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h index 56137cf5..8d8dbc5 100644 --- a/drivers/net/wireless/realtek/rtw88/reg.h +++ b/drivers/net/wireless/realtek/rtw88/reg.h @@ -412,6 +412,7 @@ #define RF_XTALX2 0xb8 #define RF_MALSEL 0xbe #define RF_LUTDBG 0xdf +#define RF_LUTWE2 0xee #define RF_LUTWE 0xef #endif diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 7dd1d15..c10894e 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -337,6 +337,7 @@ static void rtw8822c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) #define RF18_BW_80M (BIT(12)) u32 rf_reg18 = 0; + u32 rf_rxbb = 0; rf_reg18 = rtw_read_rf(rtwdev, RF_PATH_A, 0x18, RFREG_MASK); @@ -345,7 +346,7 @@ static void rtw8822c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) rf_reg18 |= (channel <= 14 ? RF18_BAND_2G : RF18_BAND_5G); rf_reg18 |= (channel & RF18_CHANNEL_MASK); - if (channel > 140) + if (channel > 144) rf_reg18 |= RF18_RFSI_GT_CH140; else if (channel >= 80) rf_reg18 |= RF18_RFSI_GE_CH80; @@ -356,16 +357,29 @@ static void rtw8822c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) case RTW_CHANNEL_WIDTH_20: default: rf_reg18 |= RF18_BW_20M; + rf_rxbb = 0x18; break; case RTW_CHANNEL_WIDTH_40: /* RF bandwidth */ rf_reg18 |= RF18_BW_40M; + rf_rxbb = 0x10; break; case RTW_CHANNEL_WIDTH_80: rf_reg18 |= RF18_BW_80M; + rf_rxbb = 0x8; break; } + rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, 0x04, 0x01); + rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, 0x1f, 0x12); + rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, 0xfffff, rf_rxbb); + rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, 0x04, 0x00); + + rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWE2, 0x04, 0x01); + rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWA, 0x1f, 0x12); + rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWD0, 0xfffff, rf_rxbb); + rtw_write_rf(rtwdev, RF_PATH_B, RF_LUTWE2, 0x04, 0x00); + rtw_write_rf(rtwdev, RF_PATH_A, RF_CFGCH, RFREG_MASK, rf_reg18); rtw_write_rf(rtwdev, RF_PATH_B, RF_CFGCH, RFREG_MASK, rf_reg18); } @@ -385,7 +399,9 @@ static void rtw8822c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw, u8 primary_ch_idx) { if (channel <= 14) { - rtw_write32_set(rtwdev, REG_ENCCK, BIT_CCK_BLK_EN); + rtw_write32_clr(rtwdev, REG_BGCTRL, BITS_RX_IQ_WEIGHT); + rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x8); + rtw_write32_set(rtwdev, REG_TXF4, BIT(20)); rtw_write32_clr(rtwdev, REG_CCK_CHECK, BIT_CHECK_CCK_EN); rtw_write32_clr(rtwdev, REG_CCKTXONLY, BIT_BB_CCK_CHECK_EN); rtw_write32_mask(rtwdev, REG_CCAMSK, 0x3F000000, 0xF); @@ -398,22 +414,43 @@ static void rtw8822c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw, rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x96a); else rtw_write32_mask(rtwdev, REG_SCOTRK, 0xfff, 0x9aa); - if (channel == 14) { - rtw_write32_mask(rtwdev, REG_PSFGC2, MASKDWORD, 0x0000b81c); - rtw_write32_mask(rtwdev, REG_PSFGC6, MASKLWORD, 0x0000); - rtw_write32_mask(rtwdev, REG_PSFGC, MASKDWORD, 0x00003667); + rtw_write32_mask(rtwdev, REG_TXF0, MASKHWORD, 0x3da0); + rtw_write32_mask(rtwdev, REG_TXF1, MASKDWORD, + 0x4962c931); + rtw_write32_mask(rtwdev, REG_TXF2, MASKLWORD, 0x6aa3); + rtw_write32_mask(rtwdev, REG_TXF3, MASKHWORD, 0xaa7b); + rtw_write32_mask(rtwdev, REG_TXF4, MASKLWORD, 0xf3d7); + rtw_write32_mask(rtwdev, REG_TXF5, MASKDWORD, 0x0); + rtw_write32_mask(rtwdev, REG_TXF6, MASKDWORD, + 0xff012455); + rtw_write32_mask(rtwdev, REG_TXF7, MASKDWORD, 0xffff); } else { - rtw_write32_mask(rtwdev, REG_PSFGC2, MASKDWORD, 0x64b80c1c); - rtw_write32_mask(rtwdev, REG_PSFGC6, MASKLWORD, 0x8810); - rtw_write32_mask(rtwdev, REG_PSFGC, MASKDWORD, 0x01235667); + rtw_write32_mask(rtwdev, REG_TXF0, MASKHWORD, 0x5284); + rtw_write32_mask(rtwdev, REG_TXF1, MASKDWORD, + 0x3e18fec8); + rtw_write32_mask(rtwdev, REG_TXF2, MASKLWORD, 0x0a88); + rtw_write32_mask(rtwdev, REG_TXF3, MASKHWORD, 0xacc4); + rtw_write32_mask(rtwdev, REG_TXF4, MASKLWORD, 0xc8b2); + rtw_write32_mask(rtwdev, REG_TXF5, MASKDWORD, + 0x00faf0de); + rtw_write32_mask(rtwdev, REG_TXF6, MASKDWORD, + 0x00122344); + rtw_write32_mask(rtwdev, REG_TXF7, MASKDWORD, + 0x0fffffff); } + if (channel == 13) + rtw_write32_mask(rtwdev, REG_TXDFIR0, 0x70, 0x3); + else + rtw_write32_mask(rtwdev, REG_TXDFIR0, 0x70, 0x1); } else if (channel > 35) { rtw_write32_set(rtwdev, REG_CCKTXONLY, BIT_BB_CCK_CHECK_EN); rtw_write32_set(rtwdev, REG_CCK_CHECK, BIT_CHECK_CCK_EN); - rtw_write32_clr(rtwdev, REG_ENCCK, BIT_CCK_BLK_EN); + rtw_write32_set(rtwdev, REG_BGCTRL, BITS_RX_IQ_WEIGHT); + rtw_write32_clr(rtwdev, REG_TXF4, BIT(20)); + rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x0); rtw_write32_mask(rtwdev, REG_CCAMSK, 0x3F000000, 0x22); - + rtw_write32_mask(rtwdev, REG_TXDFIR0, 0x70, 0x3); if (channel >= 36 && channel <= 64) { rtw_write32_mask(rtwdev, REG_RXAGCCTL0, 0x1f0, 0x1); rtw_write32_mask(rtwdev, REG_RXAGCCTL, 0x1f0, 0x1); @@ -443,13 +480,9 @@ static void rtw8822c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw, case RTW_CHANNEL_WIDTH_20: rtw_write32_mask(rtwdev, REG_DFIRBW, 0x3FF0, 0x19B); rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0x0); - rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xc0, 0x0); - rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xff00, - (primary_ch_idx | (primary_ch_idx << 4))); - rtw_write32_mask(rtwdev, REG_TXCLK, MASKH3BYTES, 0xdb6db6); - rtw_write32_mask(rtwdev, REG_DYMPRITH, 0xffffc000, 0x1F8A3); - rtw_write32_mask(rtwdev, REG_DYMPRITH, 0x1, 0x0); - rtw_write32_mask(rtwdev, REG_DYMTHMIN, 0x3f, 0x1a); + rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xffc0, 0x0); + rtw_write32_mask(rtwdev, REG_TXCLK, 0x700, 0x7); + rtw_write32_mask(rtwdev, REG_TXCLK, 0x700000, 0x6); break; case RTW_CHANNEL_WIDTH_40: rtw_write32_mask(rtwdev, REG_CCKSB, BIT(4), @@ -458,33 +491,26 @@ static void rtw8822c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw, rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xc0, 0x0); rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xff00, (primary_ch_idx | (primary_ch_idx << 4))); - rtw_write32_mask(rtwdev, REG_DYMPRITH, 0xffffc000, 0x1D821); - rtw_write32_mask(rtwdev, REG_DYMPRITH, 0x1, 0x0); - rtw_write32_mask(rtwdev, REG_DYMTHMIN, MASK12BITS, 0x618); - rtw_write32_mask(rtwdev, REG_DYMENTH0, 0x3ffff, 0x1D821); break; case RTW_CHANNEL_WIDTH_80: rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0xa); rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xc0, 0x0); rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xff00, (primary_ch_idx | (primary_ch_idx << 4))); - rtw_write32_mask(rtwdev, REG_DYMPRITH, 0xffffc000, 0x1B79F); - rtw_write32_mask(rtwdev, REG_DYMPRITH, 0x1, 0x0); - rtw_write32_mask(rtwdev, REG_DYMTHMIN, 0x3ffff, 0x18596); - rtw_write32_mask(rtwdev, REG_DYMENTH0, 0x3FFFFFFF, 0x2085D75E); - rtw_write32_mask(rtwdev, REG_DYMENTH, 0x3f, 0x1d); break; case RTW_CHANNEL_WIDTH_5: rtw_write32_mask(rtwdev, REG_DFIRBW, 0x3FF0, 0x2AB); rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0x0); rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xffc0, 0x1); - rtw_write32_mask(rtwdev, REG_TXCLK, MASKH3BYTES, 0xDB4DB2); + rtw_write32_mask(rtwdev, REG_TXCLK, 0x700, 0x4); + rtw_write32_mask(rtwdev, REG_TXCLK, 0x700000, 0x4); break; case RTW_CHANNEL_WIDTH_10: rtw_write32_mask(rtwdev, REG_DFIRBW, 0x3FF0, 0x2AB); rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xf, 0x0); rtw_write32_mask(rtwdev, REG_TXBWCTL, 0xffc0, 0x2); - rtw_write32_mask(rtwdev, REG_TXCLK, MASKH3BYTES, 0xDB5DB4); + rtw_write32_mask(rtwdev, REG_TXCLK, 0x700, 0x6); + rtw_write32_mask(rtwdev, REG_TXCLK, 0x700000, 0x5); break; } } @@ -551,7 +577,6 @@ static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, if (rx_path == BB_PATH_A || rx_path == BB_PATH_B) { rtw_write32_mask(rtwdev, REG_CCANRX, 0x00600000, 0x0); - rtw_write32_mask(rtwdev, REG_PCCAWT, 0x80000000, 0x0); } else if (rx_path == BB_PATH_AB) { rtw_write32_mask(rtwdev, REG_CCANRX, 0x00600000, 0x1); rtw_write32_mask(rtwdev, REG_CCANRX, 0x00060000, 0x1); diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h index d4806fd..fa71104 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h @@ -119,6 +119,7 @@ struct rtw8822c_efuse { #define REG_ANAPARLDO_POW_MAC 0x0029 #define BIT_LDOE25_PON BIT(0) +#define REG_TXDFIR0 0x808 #define REG_DFIRBW 0x810 #define REG_ANTMAP0 0x820 #define REG_ANTMAP 0x824 @@ -140,16 +141,22 @@ struct rtw8822c_efuse { #define REG_RXAGCCTL0 0x18ac #define REG_CCKSB 0x1a00 #define REG_RXCCKSEL 0x1a04 -#define REG_PSFGC2 0x1a24 -#define REG_PSFGC6 0x1a28 +#define REG_BGCTRL 0x1a14 +#define BITS_RX_IQ_WEIGHT (BIT(8) | BIT(9)) +#define REG_TXF0 0x1a20 +#define REG_TXF1 0x1a24 +#define REG_TXF2 0x1a28 #define REG_CCANRX 0x1a2c #define BIT_CCK_FA_RST (BIT(14) | BIT(15)) #define BIT_OFDM_FA_RST (BIT(12) | BIT(13)) #define REG_CCK_FACNT 0x1a5c #define REG_CCKTXONLY 0x1a80 #define BIT_BB_CCK_CHECK_EN BIT(18) -#define REG_PSFGC 0x1aac -#define REG_PCCAWT 0x1ac0 +#define REG_TXF3 0x1a98 +#define REG_TXF4 0x1a9c +#define REG_TXF5 0x1aa0 +#define REG_TXF6 0x1aac +#define REG_TXF7 0x1ab0 #define REG_TXANT 0x1c28 #define REG_ENCCK 0x1c3c #define BIT_CCK_BLK_EN BIT(1) From patchwork Thu Feb 14 08:58:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812083 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C094713BF for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AFC2629CA7 for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A10482D471; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EDD792D47E for ; Thu, 14 Feb 2019 09:00:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729819AbfBNI7l (ORCPT ); Thu, 14 Feb 2019 03:59:41 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39604 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730745AbfBNI7j (ORCPT ); Thu, 14 Feb 2019 03:59:39 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xKYJ005867, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xKYJ005867 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:20 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:19 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 11/24] rtw88: 8822c: update trx mode setting Date: Thu, 14 Feb 2019 16:58:50 +0800 Message-ID: <1550134743-17443-12-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Chien-Hsun Liao We rearrange the coding style of trx mode setting based on ofdm_tx, ofdm_rx, cck_tx and cck_rx. We also modify cck_rx 1r setting because the original is incorrect and could cause the degradation of sensitivity. Signed-off-by: Chien-Hsun Liao Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 132 ++++++++++++++------------ 1 file changed, 72 insertions(+), 60 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index c10894e..40008d7 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -524,81 +524,26 @@ static void rtw8822c_set_channel(struct rtw_dev *rtwdev, u8 channel, u8 bw, rtw8822c_toggle_igi(rtwdev); } -static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, - u8 rx_path, bool is_tx2_path) +static void rtw8822c_config_cck_rx_path(struct rtw_dev *rtwdev, u8 rx_path) { - if ((tx_path | rx_path) & BB_PATH_A) - rtw_write32_mask(rtwdev, REG_ORITXCODE, MASK20BITS, 0x33312); - else - rtw_write32_mask(rtwdev, REG_ORITXCODE, MASK20BITS, 0x11111); - if ((tx_path | rx_path) & BB_PATH_B) - rtw_write32_mask(rtwdev, REG_ORITXCODE2, MASK20BITS, 0x33312); - else - rtw_write32_mask(rtwdev, REG_ORITXCODE2, MASK20BITS, 0x11111); - - rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x8); - rtw_write32_mask(rtwdev, REG_CCKPATH, BIT(30), 0x1); - - if (tx_path == BB_PATH_A) - rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x8); - else if (tx_path == BB_PATH_B) - rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x4); - else if (tx_path == BB_PATH_AB) - rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0xc); - - rtw_write32_mask(rtwdev, REG_TXANTSEG, 0xf, tx_path); - rtw_write32_mask(rtwdev, REG_ENFN, BIT(16), 0x0); - rtw_write32_mask(rtwdev, REG_ENFN, BIT(31), 0x1); - - if (tx_path == BB_PATH_A) { - rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xf, 0x1); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0x3, 0x0); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xc, 0x0); - } else if (tx_path == BB_PATH_B) { - rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xf, 0x2); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0x3, 0x0); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xc, 0x0); - } else if (tx_path == BB_PATH_AB) { - rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xf, 0x3); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0x3, 0x0); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xc, 0x1); - } - - if (tx_path == BB_PATH_A || tx_path == BB_PATH_B) { - rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xf0, 0x1); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0x300, 0x0); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xc00, 0x0); - } else if (tx_path == BB_PATH_AB) { - rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xf0, 0x3); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0x300, 0x0); - rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xc00, 0x1); - } - rtw_write32_mask(rtwdev, REG_TXANT, 0xf, tx_path); - if (rx_path == BB_PATH_A || rx_path == BB_PATH_B) { + rtw_write32_mask(rtwdev, REG_CCANRX, 0x00060000, 0x0); rtw_write32_mask(rtwdev, REG_CCANRX, 0x00600000, 0x0); } else if (rx_path == BB_PATH_AB) { rtw_write32_mask(rtwdev, REG_CCANRX, 0x00600000, 0x1); rtw_write32_mask(rtwdev, REG_CCANRX, 0x00060000, 0x1); } - rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0x0f000000, 0x0); - if (rx_path == BB_PATH_A) rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0x0f000000, 0x0); else if (rx_path == BB_PATH_B) rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0x0f000000, 0x5); else if (rx_path == BB_PATH_AB) rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0x0f000000, 0x1); +} - rtw_write32_mask(rtwdev, REG_ANTMAP, MASKBYTE3LOWNIBBLE, rx_path); - rtw_write32_mask(rtwdev, REG_ANTMAP, 0x000F0000, rx_path); - - if (!(rx_path & BB_PATH_A)) - rtw_write_rf(rtwdev, 0, 0, 0xf0000, 0x1); - if (!(rx_path & BB_PATH_B)) - rtw_write_rf(rtwdev, 1, 0, 0xf0000, 0x1); - +static void rtw8822c_config_ofdm_rx_path(struct rtw_dev *rtwdev, u8 rx_path) +{ if (rx_path == BB_PATH_A || rx_path == BB_PATH_B) { rtw_write32_mask(rtwdev, REG_RXFNCTL, 0x300, 0x0); rtw_write32_mask(rtwdev, REG_RXFNCTL, 0x600000, 0x0); @@ -613,6 +558,73 @@ static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, rtw_write32_mask(rtwdev, REG_MRCM, BIT(24), 0x1); } + rtw_write32_mask(rtwdev, 0x824, 0x0f000000, rx_path); + rtw_write32_mask(rtwdev, 0x824, 0x000f0000, rx_path); +} + +static void rtw8822c_config_rx_path(struct rtw_dev *rtwdev, u8 rx_path) +{ + rtw8822c_config_cck_rx_path(rtwdev, rx_path); + rtw8822c_config_ofdm_rx_path(rtwdev, rx_path); +} + +static void rtw8822c_config_cck_tx_path(struct rtw_dev *rtwdev, u8 tx_path, + bool is_tx2_path) +{ + if (tx_path == BB_PATH_A) { + rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x8); + } else if (tx_path == BB_PATH_B) { + rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x4); + } else { + if (is_tx2_path) + rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0xc); + else + rtw_write32_mask(rtwdev, REG_RXCCKSEL, 0xf0000000, 0x8); + } +} + +static void rtw8822c_config_ofdm_tx_path(struct rtw_dev *rtwdev, u8 tx_path, + bool is_tx2_path) +{ + if (tx_path == BB_PATH_A) { + rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xff, 0x11); + rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xff, 0x0); + } else if (tx_path == BB_PATH_B) { + rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xff, 0x12); + rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xff, 0x0); + } else { + if (is_tx2_path) { + rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xff, 0x33); + rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xffff, 0x0404); + } else { + rtw_write32_mask(rtwdev, REG_ANTMAP0, 0xff, 0x31); + rtw_write32_mask(rtwdev, REG_TXLGMAP, 0xffff, 0x0400); + } + } +} + +static void rtw8822c_config_tx_path(struct rtw_dev *rtwdev, u8 tx_path, + bool is_tx2_path) +{ + rtw8822c_config_cck_tx_path(rtwdev, tx_path, is_tx2_path); + rtw8822c_config_ofdm_tx_path(rtwdev, tx_path, is_tx2_path); +} + +static void rtw8822c_config_trx_mode(struct rtw_dev *rtwdev, u8 tx_path, + u8 rx_path, bool is_tx2_path) +{ + if ((tx_path | rx_path) & BB_PATH_A) + rtw_write32_mask(rtwdev, REG_ORITXCODE, MASK20BITS, 0x33312); + else + rtw_write32_mask(rtwdev, REG_ORITXCODE, MASK20BITS, 0x11111); + if ((tx_path | rx_path) & BB_PATH_B) + rtw_write32_mask(rtwdev, REG_ORITXCODE2, MASK20BITS, 0x33312); + else + rtw_write32_mask(rtwdev, REG_ORITXCODE2, MASK20BITS, 0x11111); + + rtw8822c_config_rx_path(rtwdev, rx_path); + rtw8822c_config_tx_path(rtwdev, tx_path, is_tx2_path); + rtw8822c_toggle_igi(rtwdev); } From patchwork Thu Feb 14 08:58:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812053 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6E5B613BF for ; Thu, 14 Feb 2019 08:59:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5DFC42D1F6 for ; Thu, 14 Feb 2019 08:59:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 529412D466; Thu, 14 Feb 2019 08:59:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CAD2B2D1F6 for ; Thu, 14 Feb 2019 08:59:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731177AbfBNI7l (ORCPT ); Thu, 14 Feb 2019 03:59:41 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39600 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730476AbfBNI7k (ORCPT ); Thu, 14 Feb 2019 03:59:40 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xLib005871, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xLib005871 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:21 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:20 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 12/24] rtw88: add module param to switch lps supportability Date: Thu, 14 Feb 2019 16:58:51 +0800 Message-ID: <1550134743-17443-13-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang The module parameter is added to turn on/off lps support. And the default value is "N". It is because that lps is not compatible with bt-coexistence, WOW/PNO and the calibration routines for now. After trade lps support off against these functionalities, it is reasonable to set the parameter default to "N". Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index 5b2be74..233871e 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -13,11 +13,14 @@ #include "efuse.h" #include "debug.h" +static bool rtw_fw_support_lps; unsigned int rtw_debug_mask; EXPORT_SYMBOL(rtw_debug_mask); +module_param_named(support_lps, rtw_fw_support_lps, bool, 0644); module_param_named(debug_mask, rtw_debug_mask, uint, 0644); +MODULE_PARM_DESC(support_lps, "Set Y to enable LPS support"); MODULE_PARM_DESC(debug_mask, "Debugging mask"); static struct ieee80211_channel rtw_channeltable_2g[] = { @@ -165,7 +168,8 @@ static void rtw_watch_dog_work(struct work_struct *work) * more than two stations associated to the AP, then we can not enter * lps, because fw does not handle the overlapped beacon interval */ - if (data.rtwvif && !data.active && data.assoc_cnt == 1) + if (rtw_fw_support_lps && + data.rtwvif && !data.active && data.assoc_cnt == 1) rtw_enter_lps(rtwdev, data.rtwvif); if (rtw_flag_check(rtwdev, RTW_FLAG_SCANNING)) From patchwork Thu Feb 14 08:58:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812089 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8A15B922 for ; Thu, 14 Feb 2019 09:00:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7695129CA7 for ; Thu, 14 Feb 2019 09:00:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 68F5A29D66; Thu, 14 Feb 2019 09:00:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 444992D466 for ; Thu, 14 Feb 2019 08:59:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2394863AbfBNI7z (ORCPT ); Thu, 14 Feb 2019 03:59:55 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39617 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731339AbfBNI7n (ORCPT ); Thu, 14 Feb 2019 03:59:43 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xMUf005875, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xMUf005875 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:22 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:21 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 13/24] rtw88: add 8822c tx power index table parsing support Date: Thu, 14 Feb 2019 16:58:52 +0800 Message-ID: <1550134743-17443-14-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Tzu-En Huang For power by rate table, 8822b needs to use bcd2bin() to parse the table, while 8822c does not. Variable is_pwr_by_rate_dec is used to identify whether we need to treat the value from the table as BCD code or not. And since the unit of tx power index diff is changed in 8822c, the index is multiplied by a factor to get desired index value. Signed-off-by: Tzu-En Huang Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/main.c | 3 +- drivers/net/wireless/realtek/rtw88/main.h | 2 + drivers/net/wireless/realtek/rtw88/phy.c | 95 ++++++++++++++++----------- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 + 5 files changed, 63 insertions(+), 41 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index 233871e..1016f98 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -1042,8 +1042,7 @@ static int rtw_chip_board_info_setup(struct rtw_dev *rtwdev) rtw_phy_setup_phy_cond(rtwdev, 0); rtw_hw_init_tx_power(hal); - if (rtwdev->chip->id != RTW_CHIP_TYPE_8822C) - rtw_load_table(rtwdev, rfe_def->phy_pg_tbl); + rtw_load_table(rtwdev, rfe_def->phy_pg_tbl); rtw_load_table(rtwdev, rfe_def->txpwr_lmt_tbl); rtw_phy_tx_power_by_rate_config(hal); rtw_phy_tx_power_limit_config(hal); diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h index 85a719c..a660651 100644 --- a/drivers/net/wireless/realtek/rtw88/main.h +++ b/drivers/net/wireless/realtek/rtw88/main.h @@ -808,6 +808,8 @@ struct rtw_chip_info { u8 csi_buf_pg_num; u8 dig_max; u8 dig_min; + u8 txgi_factor; + bool is_pwr_by_rate_dec; bool ht_supported; bool vht_supported; diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c index 4a9ae1f..79f25e8 100644 --- a/drivers/net/wireless/realtek/rtw88/phy.c +++ b/drivers/net/wireless/realtek/rtw88/phy.c @@ -965,13 +965,16 @@ static u8 rtw_get_channel_group(u8 channel) } } -static u8 phy_get_2g_tx_power_index(struct rtw_2g_txpwr_idx *pwr_idx_2g, +static u8 phy_get_2g_tx_power_index(struct rtw_dev *rtwdev, + struct rtw_2g_txpwr_idx *pwr_idx_2g, enum rtw_bandwidth bandwidth, u8 rate, u8 group) { + struct rtw_chip_info *chip = rtwdev->chip; u8 tx_power; bool mcs_rate; bool above_2ss; + u8 factor = chip->txgi_factor; if (rate <= DESC_RATE11M) tx_power = pwr_idx_2g->cck_base[group]; @@ -979,7 +982,7 @@ static u8 phy_get_2g_tx_power_index(struct rtw_2g_txpwr_idx *pwr_idx_2g, tx_power = pwr_idx_2g->bw40_base[group]; if (rate >= DESC_RATE6M && rate <= DESC_RATE54M) - tx_power += pwr_idx_2g->ht_1s_diff.ofdm; + tx_power += pwr_idx_2g->ht_1s_diff.ofdm * factor; mcs_rate = (rate >= DESC_RATEMCS0 && rate <= DESC_RATEMCS15) || (rate >= DESC_RATEVHT1SS_MCS0 && @@ -994,28 +997,31 @@ static u8 phy_get_2g_tx_power_index(struct rtw_2g_txpwr_idx *pwr_idx_2g, default: WARN_ON(1); case RTW_CHANNEL_WIDTH_20: - tx_power += pwr_idx_2g->ht_1s_diff.bw20; + tx_power += pwr_idx_2g->ht_1s_diff.bw20 * factor; if (above_2ss) - tx_power += pwr_idx_2g->ht_2s_diff.bw20; + tx_power += pwr_idx_2g->ht_2s_diff.bw20 * factor; break; case RTW_CHANNEL_WIDTH_40: /* bw40 is the base power */ if (above_2ss) - tx_power += pwr_idx_2g->ht_2s_diff.bw40; + tx_power += pwr_idx_2g->ht_2s_diff.bw40 * factor; break; } return tx_power; } -static u8 phy_get_5g_tx_power_index(struct rtw_5g_txpwr_idx *pwr_idx_5g, +static u8 phy_get_5g_tx_power_index(struct rtw_dev *rtwdev, + struct rtw_5g_txpwr_idx *pwr_idx_5g, enum rtw_bandwidth bandwidth, u8 rate, u8 group) { + struct rtw_chip_info *chip = rtwdev->chip; u8 tx_power; u8 upper, lower; bool mcs_rate; bool above_2ss; + u8 factor = chip->txgi_factor; tx_power = pwr_idx_5g->bw40_base[group]; @@ -1026,7 +1032,7 @@ static u8 phy_get_5g_tx_power_index(struct rtw_5g_txpwr_idx *pwr_idx_5g, (rate >= DESC_RATEVHT2SS_MCS0); if (!mcs_rate) { - tx_power += pwr_idx_5g->ht_1s_diff.ofdm; + tx_power += pwr_idx_5g->ht_1s_diff.ofdm * factor; return tx_power; } @@ -1034,14 +1040,14 @@ static u8 phy_get_5g_tx_power_index(struct rtw_5g_txpwr_idx *pwr_idx_5g, default: WARN_ON(1); case RTW_CHANNEL_WIDTH_20: - tx_power += pwr_idx_5g->ht_1s_diff.bw20; + tx_power += pwr_idx_5g->ht_1s_diff.bw20 * factor; if (above_2ss) - tx_power += pwr_idx_5g->ht_2s_diff.bw20; + tx_power += pwr_idx_5g->ht_2s_diff.bw20 * factor; break; case RTW_CHANNEL_WIDTH_40: /* bw40 is the base power */ if (above_2ss) - tx_power += pwr_idx_5g->ht_2s_diff.bw40; + tx_power += pwr_idx_5g->ht_2s_diff.bw40 * factor; break; case RTW_CHANNEL_WIDTH_80: /* the base idx of bw80 is the average of bw40+/bw40- */ @@ -1049,9 +1055,9 @@ static u8 phy_get_5g_tx_power_index(struct rtw_5g_txpwr_idx *pwr_idx_5g, upper = pwr_idx_5g->bw40_base[group + 1]; tx_power = (lower + upper) / 2; - tx_power += pwr_idx_5g->vht_1s_diff.bw80; + tx_power += pwr_idx_5g->vht_1s_diff.bw80 * factor; if (above_2ss) - tx_power += pwr_idx_5g->vht_2s_diff.bw80; + tx_power += pwr_idx_5g->vht_2s_diff.bw80 * factor; break; } @@ -1114,12 +1120,14 @@ u8 phy_get_tx_power_index(void *adapter, u8 rf_path, u8 rate, /* base power index for 2.4G/5G */ if (channel <= 14) { band = PHY_BAND_2G; - tx_power = phy_get_2g_tx_power_index(&pwr_idx->pwr_idx_2g, + tx_power = phy_get_2g_tx_power_index(rtwdev, + &pwr_idx->pwr_idx_2g, bandwidth, rate, group); offset = hal->tx_pwr_by_rate_offset_2g[rf_path][rate]; } else { band = PHY_BAND_5G; - tx_power = phy_get_5g_tx_power_index(&pwr_idx->pwr_idx_5g, + tx_power = phy_get_5g_tx_power_index(rtwdev, + &pwr_idx->pwr_idx_5g, bandwidth, rate, group); offset = hal->tx_pwr_by_rate_offset_5g[rf_path][rate]; } @@ -1173,6 +1181,14 @@ void phy_set_tx_power_index_by_rs(void *adapter, u8 ch, u8 path, u8 rs) } } +static u8 tbl_to_dec_pwr_by_rate(struct rtw_dev *rtwdev, u32 hex, u8 i) +{ + if (rtwdev->chip->is_pwr_by_rate_dec) + return bcd_to_dec_pwr_by_rate(hex, i); + else + return (hex >> (i * 8)) & 0xFF; +} + static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 val, u8 *rate, @@ -1188,7 +1204,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATE12M; rate[3] = DESC_RATE18M; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xE04: @@ -1198,7 +1214,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATE48M; rate[3] = DESC_RATE54M; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xE08: @@ -1213,7 +1229,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATE11M; for (i = 1; i < 4; ++i) pwr_by_rate[i - 1] = - bcd_to_dec_pwr_by_rate(val, i); + tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 3; } else if (mask == 0x000000ff) { rate[0] = DESC_RATE11M; @@ -1228,7 +1244,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS2; rate[3] = DESC_RATEMCS3; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xE14: @@ -1238,7 +1254,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS6; rate[3] = DESC_RATEMCS7; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xE18: @@ -1248,7 +1264,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS10; rate[3] = DESC_RATEMCS11; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xE1C: @@ -1258,7 +1274,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS14; rate[3] = DESC_RATEMCS15; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; @@ -1267,7 +1283,8 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[1] = DESC_RATE2M; rate[2] = DESC_RATE5_5M; for (i = 1; i < 4; ++i) - pwr_by_rate[i - 1] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i - 1] = tbl_to_dec_pwr_by_rate(rtwdev, + val, i); *rate_num = 3; break; case 0xC20: @@ -1279,7 +1296,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATE5_5M; rate[3] = DESC_RATE11M; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC24: @@ -1291,7 +1308,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATE12M; rate[3] = DESC_RATE18M; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC28: @@ -1303,7 +1320,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATE48M; rate[3] = DESC_RATE54M; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC2C: @@ -1315,7 +1332,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS2; rate[3] = DESC_RATEMCS3; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC30: @@ -1327,7 +1344,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS6; rate[3] = DESC_RATEMCS7; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC34: @@ -1339,7 +1356,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS10; rate[3] = DESC_RATEMCS11; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC38: @@ -1351,7 +1368,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS14; rate[3] = DESC_RATEMCS15; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC3C: @@ -1363,7 +1380,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEVHT1SS_MCS2; rate[3] = DESC_RATEVHT1SS_MCS3; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC40: @@ -1375,7 +1392,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEVHT1SS_MCS6; rate[3] = DESC_RATEVHT1SS_MCS7; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC44: @@ -1387,7 +1404,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEVHT2SS_MCS0; rate[3] = DESC_RATEVHT2SS_MCS1; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC48: @@ -1399,7 +1416,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEVHT2SS_MCS4; rate[3] = DESC_RATEVHT2SS_MCS5; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xC4C: @@ -1411,7 +1428,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEVHT2SS_MCS8; rate[3] = DESC_RATEVHT2SS_MCS9; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xCD8: @@ -1423,7 +1440,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS18; rate[3] = DESC_RATEMCS19; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xCDC: @@ -1435,7 +1452,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEMCS22; rate[3] = DESC_RATEMCS23; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xCE0: @@ -1447,7 +1464,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEVHT3SS_MCS2; rate[3] = DESC_RATEVHT3SS_MCS3; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xCE4: @@ -1459,7 +1476,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[2] = DESC_RATEVHT3SS_MCS6; rate[3] = DESC_RATEVHT3SS_MCS7; for (i = 0; i < 4; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 4; break; case 0xCE8: @@ -1469,7 +1486,7 @@ static void phy_get_rate_values_of_txpwr_by_rate(struct rtw_dev *rtwdev, rate[0] = DESC_RATEVHT3SS_MCS8; rate[1] = DESC_RATEVHT3SS_MCS9; for (i = 0; i < 2; ++i) - pwr_by_rate[i] = bcd_to_dec_pwr_by_rate(val, i); + pwr_by_rate[i] = tbl_to_dec_pwr_by_rate(rtwdev, val, i); *rate_num = 2; break; default: diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c index 784e725..376ed88 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c @@ -1564,6 +1564,8 @@ struct rtw_chip_info rtw8822b_hw_spec = { .ptct_efuse_size = 96, .txff_size = 262144, .rxff_size = 24576, + .txgi_factor = 1, + .is_pwr_by_rate_dec = true, .csi_buf_pg_num = 0, .band = RTW_BAND_2G | RTW_BAND_5G, .page_size = 128, diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 40008d7..19e8e7b 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -1180,6 +1180,8 @@ struct rtw_chip_info rtw8822c_hw_spec = { .ptct_efuse_size = 124, .txff_size = 262144, .rxff_size = 24576, + .txgi_factor = 2, + .is_pwr_by_rate_dec = false, .csi_buf_pg_num = 50, .band = RTW_BAND_2G | RTW_BAND_5G, .page_size = 128, From patchwork Thu Feb 14 08:58:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812057 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B129E13BF for ; Thu, 14 Feb 2019 08:59:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9D3AF2D471 for ; Thu, 14 Feb 2019 08:59:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 912EC2D47E; Thu, 14 Feb 2019 08:59:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7DC3C2D460 for ; Thu, 14 Feb 2019 08:59:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388630AbfBNI7o (ORCPT ); Thu, 14 Feb 2019 03:59:44 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39622 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732763AbfBNI7n (ORCPT ); Thu, 14 Feb 2019 03:59:43 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xMuN005880, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xMuN005880 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:22 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:22 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 14/24] rtw88: add 8822c tx agc support Date: Thu, 14 Feb 2019 16:58:53 +0800 Message-ID: <1550134743-17443-15-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Tzu-En Huang Compared with 8822b, 8822c writes TX AGC table by reference and difference. These values can be calculated after we have a complete tx power table. Hence, driver needs to maintain a tx power table and collects the indexes before writing them into the tx agc table to let 8822b and 8822c chips share the same configuration flow. Signed-off-by: Tzu-En Huang Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/main.h | 6 +- drivers/net/wireless/realtek/rtw88/phy.c | 83 ++++++++++++++------------- drivers/net/wireless/realtek/rtw88/phy.h | 9 +++ drivers/net/wireless/realtek/rtw88/rtw8822b.c | 43 ++++++++------ drivers/net/wireless/realtek/rtw88/rtw8822c.c | 77 ++++++++++++++++++++++++- 5 files changed, 156 insertions(+), 62 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h index a660651..1a98747 100644 --- a/drivers/net/wireless/realtek/rtw88/main.h +++ b/drivers/net/wireless/realtek/rtw88/main.h @@ -614,8 +614,7 @@ struct rtw_chip_ops { u32 addr, u32 mask); bool (*write_rf)(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, u32 addr, u32 mask, u32 data); - void (*set_tx_power_index)(struct rtw_dev *rtwdev, u8 power_index, - u8 rf_path, u8 rate); + void (*set_tx_power_index)(struct rtw_dev *rtwdev); int (*rsvd_page_dump)(struct rtw_dev *rtwdev, u8 *buf, u32 offset, u32 size); void (*set_antenna)(struct rtw_dev *rtwdev, u8 antenna_tx, @@ -810,6 +809,7 @@ struct rtw_chip_info { u8 dig_min; u8 txgi_factor; bool is_pwr_by_rate_dec; + u8 max_power_index; bool ht_supported; bool vht_supported; @@ -995,6 +995,8 @@ struct rtw_hal { [RTW_CHANNEL_WIDTH_MAX] [RTW_RATE_SECTION_MAX] [RTW_MAX_CHANNEL_NUM_5G]; + s8 tx_pwr_tbl[RTW_RF_PATH_MAX] + [DESC_RATE_MAX]; }; struct rtw_dev { diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c index 79f25e8..9b5b8bf 100644 --- a/drivers/net/wireless/realtek/rtw88/phy.c +++ b/drivers/net/wireless/realtek/rtw88/phy.c @@ -818,33 +818,41 @@ void rtw_phy_load_tables(struct rtw_dev *rtwdev) #define RTW_MAX_POWER_INDEX 0x3F -static u8 cck_rates[] = {DESC_RATE1M, DESC_RATE2M, DESC_RATE5_5M, DESC_RATE11M}; -static u8 ofdm_rates[] = {DESC_RATE6M, DESC_RATE9M, DESC_RATE12M, - DESC_RATE18M, DESC_RATE24M, DESC_RATE36M, - DESC_RATE48M, DESC_RATE54M}; -static u8 ht_1s_rates[] = {DESC_RATEMCS0, DESC_RATEMCS1, DESC_RATEMCS2, - DESC_RATEMCS3, DESC_RATEMCS4, DESC_RATEMCS5, - DESC_RATEMCS6, DESC_RATEMCS7}; -static u8 ht_2s_rates[] = {DESC_RATEMCS8, DESC_RATEMCS9, DESC_RATEMCS10, - DESC_RATEMCS11, DESC_RATEMCS12, DESC_RATEMCS13, - DESC_RATEMCS14, DESC_RATEMCS15}; -static u8 vht_1s_rates[] = {DESC_RATEVHT1SS_MCS0, DESC_RATEVHT1SS_MCS1, - DESC_RATEVHT1SS_MCS2, DESC_RATEVHT1SS_MCS3, - DESC_RATEVHT1SS_MCS4, DESC_RATEVHT1SS_MCS5, - DESC_RATEVHT1SS_MCS6, DESC_RATEVHT1SS_MCS7, - DESC_RATEVHT1SS_MCS8, DESC_RATEVHT1SS_MCS9}; -static u8 vht_2s_rates[] = {DESC_RATEVHT2SS_MCS0, DESC_RATEVHT2SS_MCS1, - DESC_RATEVHT2SS_MCS2, DESC_RATEVHT2SS_MCS3, - DESC_RATEVHT2SS_MCS4, DESC_RATEVHT2SS_MCS5, - DESC_RATEVHT2SS_MCS6, DESC_RATEVHT2SS_MCS7, - DESC_RATEVHT2SS_MCS8, DESC_RATEVHT2SS_MCS9}; -static u8 cck_size = ARRAY_SIZE(cck_rates); -static u8 ofdm_size = ARRAY_SIZE(ofdm_rates); -static u8 ht_1s_size = ARRAY_SIZE(ht_1s_rates); -static u8 ht_2s_size = ARRAY_SIZE(ht_2s_rates); -static u8 vht_1s_size = ARRAY_SIZE(vht_1s_rates); -static u8 vht_2s_size = ARRAY_SIZE(vht_2s_rates); - +u8 cck_rates[] = {DESC_RATE1M, DESC_RATE2M, DESC_RATE5_5M, DESC_RATE11M}; +u8 ofdm_rates[] = {DESC_RATE6M, DESC_RATE9M, DESC_RATE12M, + DESC_RATE18M, DESC_RATE24M, DESC_RATE36M, + DESC_RATE48M, DESC_RATE54M}; +u8 ht_1s_rates[] = {DESC_RATEMCS0, DESC_RATEMCS1, DESC_RATEMCS2, + DESC_RATEMCS3, DESC_RATEMCS4, DESC_RATEMCS5, + DESC_RATEMCS6, DESC_RATEMCS7}; +u8 ht_2s_rates[] = {DESC_RATEMCS8, DESC_RATEMCS9, DESC_RATEMCS10, + DESC_RATEMCS11, DESC_RATEMCS12, DESC_RATEMCS13, + DESC_RATEMCS14, DESC_RATEMCS15}; +u8 vht_1s_rates[] = {DESC_RATEVHT1SS_MCS0, DESC_RATEVHT1SS_MCS1, + DESC_RATEVHT1SS_MCS2, DESC_RATEVHT1SS_MCS3, + DESC_RATEVHT1SS_MCS4, DESC_RATEVHT1SS_MCS5, + DESC_RATEVHT1SS_MCS6, DESC_RATEVHT1SS_MCS7, + DESC_RATEVHT1SS_MCS8, DESC_RATEVHT1SS_MCS9}; +u8 vht_2s_rates[] = {DESC_RATEVHT2SS_MCS0, DESC_RATEVHT2SS_MCS1, + DESC_RATEVHT2SS_MCS2, DESC_RATEVHT2SS_MCS3, + DESC_RATEVHT2SS_MCS4, DESC_RATEVHT2SS_MCS5, + DESC_RATEVHT2SS_MCS6, DESC_RATEVHT2SS_MCS7, + DESC_RATEVHT2SS_MCS8, DESC_RATEVHT2SS_MCS9}; +u8 cck_size = ARRAY_SIZE(cck_rates); +u8 ofdm_size = ARRAY_SIZE(ofdm_rates); +u8 ht_1s_size = ARRAY_SIZE(ht_1s_rates); +u8 ht_2s_size = ARRAY_SIZE(ht_2s_rates); +u8 vht_1s_size = ARRAY_SIZE(vht_1s_rates); +u8 vht_2s_size = ARRAY_SIZE(vht_2s_rates); +u8 *rate_section[RTW_RATE_SECTION_MAX] = {cck_rates, ofdm_rates, + ht_1s_rates, ht_2s_rates, + vht_1s_rates, vht_2s_rates}; +u8 rate_size[RTW_RATE_SECTION_MAX] = {ARRAY_SIZE(cck_rates), + ARRAY_SIZE(ofdm_rates), + ARRAY_SIZE(ht_1s_rates), + ARRAY_SIZE(ht_2s_rates), + ARRAY_SIZE(vht_1s_rates), + ARRAY_SIZE(vht_2s_rates)}; static const u8 rtw_channel_idx_5g[RTW_MAX_CHANNEL_NUM_5G] = { 36, 38, 40, 42, 44, 46, 48, /* Band 1 */ 52, 54, 56, 58, 60, 62, 64, /* Band 2 */ @@ -1087,6 +1095,7 @@ void phy_set_tx_power_level_by_path(struct rtw_dev *rtwdev, u8 ch, u8 path) void rtw_phy_set_tx_power_level(struct rtw_dev *rtwdev, u8 channel) { + struct rtw_chip_info *chip = rtwdev->chip; struct rtw_hal *hal = &rtwdev->hal; u8 path; @@ -1095,6 +1104,7 @@ void rtw_phy_set_tx_power_level(struct rtw_dev *rtwdev, u8 channel) for (path = 0; path < hal->rf_path_num; path++) phy_set_tx_power_level_by_path(rtwdev, channel, path); + chip->ops->set_tx_power_index(rtwdev); mutex_unlock(&hal->tx_power_mutex); } @@ -1140,8 +1150,8 @@ u8 phy_get_tx_power_index(void *adapter, u8 rf_path, u8 rate, tx_power += offset; - if (tx_power > RTW_MAX_POWER_INDEX) - tx_power = RTW_MAX_POWER_INDEX; + if (tx_power > rtwdev->chip->max_power_index) + tx_power = rtwdev->chip->max_power_index; return tx_power; } @@ -1150,7 +1160,6 @@ void phy_set_tx_power_index_by_rs(void *adapter, u8 ch, u8 path, u8 rs) { struct rtw_dev *rtwdev = adapter; struct rtw_hal *hal = &rtwdev->hal; - struct rtw_chip_info *chip = rtwdev->chip; u8 regd = rtwdev->regd.txpwr_regd; u8 *rates; u8 size; @@ -1158,26 +1167,18 @@ void phy_set_tx_power_index_by_rs(void *adapter, u8 ch, u8 path, u8 rs) u8 pwr_idx; u8 bw; int i; - u8 *rate_sections[RTW_RATE_SECTION_MAX] = { - cck_rates, ofdm_rates, ht_1s_rates, ht_2s_rates, - vht_1s_rates, vht_2s_rates, - }; - u8 sizes[RTW_RATE_SECTION_MAX] = { - cck_size, ofdm_size, ht_1s_size, ht_2s_size, - vht_1s_size, vht_2s_size, - }; if (rs >= RTW_RATE_SECTION_MAX) return; - rates = rate_sections[rs]; - size = sizes[rs]; + rates = rate_section[rs]; + size = rate_size[rs]; bw = hal->current_band_width; for (i = 0; i < size; i++) { rate = rates[i]; pwr_idx = phy_get_tx_power_index(adapter, path, rate, bw, ch, regd); - chip->ops->set_tx_power_index(rtwdev, pwr_idx, path, rate); + hal->tx_pwr_tbl[path][rate] = pwr_idx; } } diff --git a/drivers/net/wireless/realtek/rtw88/phy.h b/drivers/net/wireless/realtek/rtw88/phy.h index f855d75..8dfbb4b 100644 --- a/drivers/net/wireless/realtek/rtw88/phy.h +++ b/drivers/net/wireless/realtek/rtw88/phy.h @@ -7,6 +7,15 @@ #include "debug.h" +extern u8 cck_rates[]; +extern u8 ofdm_rates[]; +extern u8 ht_1s_rates[]; +extern u8 ht_2s_rates[]; +extern u8 vht_1s_rates[]; +extern u8 vht_2s_rates[]; +extern u8 *rate_section[]; +extern u8 rate_size[]; + void rtw_phy_init(struct rtw_dev *rtwdev); void rtw_phy_dynamic_mechanism(struct rtw_dev *rtwdev); u8 rtw_phy_rf_power_2_rssi(s8 *rf_power, u8 path_num); diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c index 376ed88..95af97f 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c @@ -888,27 +888,37 @@ static void rtw8822b_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc, rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status); } -static void rtw8822b_set_tx_power_index(struct rtw_dev *rtwdev, u8 power_index, - u8 path, u8 rate) +static void +rtw8822b_set_tx_power_index_by_rate(struct rtw_dev *rtwdev, u8 path, u8 rs) { + struct rtw_hal *hal = &rtwdev->hal; static const u32 offset_txagc[2] = {0x1d00, 0x1d80}; static u32 phy_pwr_idx; - u8 rate_idx; - u8 shift; + u8 rate, rate_idx, pwr_index, shift; + int j; + + for (j = 0; j < rate_size[rs]; j++) { + rate = rate_section[rs][j]; + pwr_index = hal->tx_pwr_tbl[path][rate]; + shift = rate & 0x3; + phy_pwr_idx |= ((u32)pwr_index << (shift * 8)); + if (shift == 0x3) { + rate_idx = rate & 0xfc; + rtw_write32(rtwdev, offset_txagc[path] + rate_idx, + phy_pwr_idx); + phy_pwr_idx = 0; + } + } +} - if (path > RF_PATH_B || rate > 0x53) - return; +static void rtw8822b_set_tx_power_index(struct rtw_dev *rtwdev) +{ + struct rtw_hal *hal = &rtwdev->hal; + int rs, path; - /* - * 8822B uses four bytes tx power index, driver needs to combine every - * one-byte value for the phydm - */ - shift = rate & 0x3; - phy_pwr_idx |= ((u32)power_index << (shift * 8)); - if (shift == 0x3) { - rate_idx = rate & 0xfc; - rtw_write32(rtwdev, offset_txagc[path] + rate_idx, phy_pwr_idx); - phy_pwr_idx = 0; + for (path = 0; path < hal->rf_path_num; path++) { + for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) + rtw8822b_set_tx_power_index_by_rate(rtwdev, path, rs); } } @@ -1566,6 +1576,7 @@ struct rtw_chip_info rtw8822b_hw_spec = { .rxff_size = 24576, .txgi_factor = 1, .is_pwr_by_rate_dec = true, + .max_power_index = 0x3f, .csi_buf_pg_num = 0, .band = RTW_BAND_2G | RTW_BAND_5G, .page_size = 128, diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 19e8e7b..9c3f0f1 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -751,10 +751,80 @@ static void rtw8822c_query_rx_desc(struct rtw_dev *rtwdev, u8 *rx_desc, rtw_rx_fill_rx_status(rtwdev, pkt_stat, hdr, rx_status, phy_status); } -static void rtw8822c_set_tx_power_index(struct rtw_dev *rtwdev, u8 power_index, - u8 path, u8 rate) +static void +rtw8822c_set_write_tx_power_ref(struct rtw_dev *rtwdev, u8 *tx_pwr_ref_cck, + u8 *tx_pwr_ref_ofdm) { - /* 8822C will use TSSI to track tx power */ + struct rtw_hal *hal = &rtwdev->hal; + u32 txref_cck[2] = {0x18a0, 0x41a0}; + u32 txref_ofdm[2] = {0x18e8, 0x41e8}; + u8 path; + + for (path = 0; path < hal->rf_path_num; path++) { + rtw_write32_mask(rtwdev, 0x1c90, BIT(15), 0); + rtw_write32_mask(rtwdev, txref_cck[path], 0x7f0000, + tx_pwr_ref_cck[path]); + } + for (path = 0; path < hal->rf_path_num; path++) { + rtw_write32_mask(rtwdev, 0x1c90, BIT(15), 0); + rtw_write32_mask(rtwdev, txref_ofdm[path], 0x1fc00, + tx_pwr_ref_ofdm[path]); + } +} + +static void rtw8822c_set_tx_power_diff(struct rtw_dev *rtwdev, u8 rate, + s8 *diff_idx) +{ + u32 offset_txagc = 0x3a00; + u8 rate_idx = rate & 0xfc; + u8 pwr_idx[4]; + u32 phy_pwr_idx; + int i; + + for (i = 0; i < 4; i++) + pwr_idx[i] = diff_idx[i] & 0x7f; + + phy_pwr_idx = pwr_idx[0] | + (pwr_idx[1] << 8) | + (pwr_idx[2] << 16) | + (pwr_idx[3] << 24); + + rtw_write32_mask(rtwdev, 0x1c90, BIT(15), 0x0); + rtw_write32_mask(rtwdev, offset_txagc + rate_idx, MASKDWORD, + phy_pwr_idx); +} + +static void rtw8822c_set_tx_power_index(struct rtw_dev *rtwdev) +{ + struct rtw_hal *hal = &rtwdev->hal; + u8 rs, rate, j; + u8 pwr_ref_cck[2] = {hal->tx_pwr_tbl[RF_PATH_A][DESC_RATE11M], + hal->tx_pwr_tbl[RF_PATH_B][DESC_RATE11M]}; + u8 pwr_ref_ofdm[2] = {hal->tx_pwr_tbl[RF_PATH_A][DESC_RATEMCS7], + hal->tx_pwr_tbl[RF_PATH_B][DESC_RATEMCS7]}; + s8 diff_a, diff_b; + u8 pwr_a, pwr_b; + s8 diff_idx[4]; + + rtw8822c_set_write_tx_power_ref(rtwdev, pwr_ref_cck, pwr_ref_ofdm); + for (rs = 0; rs < RTW_RATE_SECTION_MAX; rs++) { + for (j = 0; j < rate_size[rs]; j++) { + rate = rate_section[rs][j]; + pwr_a = hal->tx_pwr_tbl[RF_PATH_A][rate]; + pwr_b = hal->tx_pwr_tbl[RF_PATH_B][rate]; + if (rs == 0) { + diff_a = (s8)pwr_a - (s8)pwr_ref_cck[0]; + diff_b = (s8)pwr_b - (s8)pwr_ref_cck[1]; + } else { + diff_a = (s8)pwr_a - (s8)pwr_ref_ofdm[0]; + diff_b = (s8)pwr_b - (s8)pwr_ref_ofdm[1]; + } + diff_idx[rate % 4] = min(diff_a, diff_b); + if (rate % 4 == 3) + rtw8822c_set_tx_power_diff(rtwdev, rate - 3, + diff_idx); + } + } } static void rtw8822c_cfg_ldo25(struct rtw_dev *rtwdev, bool enable) @@ -1182,6 +1252,7 @@ struct rtw_chip_info rtw8822c_hw_spec = { .rxff_size = 24576, .txgi_factor = 2, .is_pwr_by_rate_dec = false, + .max_power_index = 0x7f, .csi_buf_pg_num = 50, .band = RTW_BAND_2G | RTW_BAND_5G, .page_size = 128, From patchwork Thu Feb 14 08:58:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812073 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C610717E0 for ; Thu, 14 Feb 2019 08:59:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B43022D1F6 for ; Thu, 14 Feb 2019 08:59:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A88612D466; Thu, 14 Feb 2019 08:59:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D810E2D460 for ; Thu, 14 Feb 2019 08:59:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391181AbfBNI7w (ORCPT ); Thu, 14 Feb 2019 03:59:52 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39621 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732622AbfBNI7o (ORCPT ); Thu, 14 Feb 2019 03:59:44 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xNKR005889, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xNKR005889 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:23 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:22 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 15/24] rtw88: extract utility functions into util.c Date: Thu, 14 Feb 2019 16:58:54 +0800 Message-ID: <1550134743-17443-16-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang Move functions that might be used as utilities, such as lte_coex_[read/write] and registers restore, into util.* files. Besides, hardware polling and some vif/sta iteration wrappers are also categorized into utilitiy functions as well. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/Makefile | 1 + drivers/net/wireless/realtek/rtw88/mac.c | 53 +-------------------- drivers/net/wireless/realtek/rtw88/main.h | 46 +++--------------- drivers/net/wireless/realtek/rtw88/util.c | 72 +++++++++++++++++++++++++++++ drivers/net/wireless/realtek/rtw88/util.h | 34 ++++++++++++++ 5 files changed, 115 insertions(+), 91 deletions(-) create mode 100644 drivers/net/wireless/realtek/rtw88/util.c create mode 100644 drivers/net/wireless/realtek/rtw88/util.h diff --git a/drivers/net/wireless/realtek/rtw88/Makefile b/drivers/net/wireless/realtek/rtw88/Makefile index d70782a..da5e36e 100644 --- a/drivers/net/wireless/realtek/rtw88/Makefile +++ b/drivers/net/wireless/realtek/rtw88/Makefile @@ -1,6 +1,7 @@ obj-$(CONFIG_RTW88_CORE) += rtw88.o rtw88-y += main.o \ mac80211.o \ + util.o \ debug.o \ tx.o \ rx.o \ diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c index 3dd011d..5a60732 100644 --- a/drivers/net/wireless/realtek/rtw88/mac.c +++ b/drivers/net/wireless/realtek/rtw88/mac.c @@ -304,35 +304,6 @@ void rtw_mac_power_off(struct rtw_dev *rtwdev) rtw_mac_power_switch(rtwdev, false); } -static void -restore_mac_reg(struct rtw_dev *rtwdev, struct rtw_backup_info *bckp, u32 num) -{ - u8 len; - u32 reg; - u32 val; - int i; - - for (i = 0; i < num; i++, bckp++) { - len = bckp->len; - reg = bckp->reg; - val = bckp->val; - - switch (len) { - case 1: - rtw_write8(rtwdev, reg, (u8)val); - break; - case 2: - rtw_write16(rtwdev, reg, (u16)val); - break; - case 4: - rtw_write32(rtwdev, reg, (u32)val); - break; - default: - break; - } - } -} - static bool check_firmware_size(const u8 *data, u32 size) { u32 dmem_size; @@ -355,28 +326,6 @@ static bool check_firmware_size(const u8 *data, u32 size) return true; } -static bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val) -{ - if (!check_hw_ready(rtwdev, LTECOEX_ACCESS_CTRL, LTECOEX_READY, 1)) - return false; - - rtw_write32(rtwdev, LTECOEX_ACCESS_CTRL, 0x800F0000 | offset); - *val = rtw_read32(rtwdev, LTECOEX_READ_DATA); - - return true; -} - -static bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value) -{ - if (!check_hw_ready(rtwdev, LTECOEX_ACCESS_CTRL, LTECOEX_READY, 1)) - return false; - - rtw_write32(rtwdev, LTECOEX_WRITE_DATA, value); - rtw_write32(rtwdev, LTECOEX_ACCESS_CTRL, 0xC00F0000 | offset); - - return true; -} - static void wlan_cpu_enable(struct rtw_dev *rtwdev, bool enable) { if (enable) { @@ -459,7 +408,7 @@ static void download_firmware_reg_restore(struct rtw_dev *rtwdev, struct rtw_backup_info *bckp, u8 bckp_num) { - restore_mac_reg(rtwdev, bckp, bckp_num); + rtw_restore_reg(rtwdev, bckp, bckp_num); } #define TX_DESC_SIZE 48 diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h index 1a98747..e091a87 100644 --- a/drivers/net/wireless/realtek/rtw88/main.h +++ b/drivers/net/wireless/realtek/rtw88/main.h @@ -12,6 +12,8 @@ #include #include +#include "util.h" + #define RTW_MAX_MAC_ID_NUM 32 #define RTW_MAX_SEC_CAM_NUM 32 @@ -1079,47 +1081,13 @@ static inline void rtw_flag_set(struct rtw_dev *rtwdev, enum rtw_flags flag) set_bit(flag, rtwdev->flags); } -static inline u8 *get_hdr_bssid(struct ieee80211_hdr *hdr) -{ - __le16 fc = hdr->frame_control; - u8 *bssid; - - if (ieee80211_has_tods(fc)) - bssid = hdr->addr1; - else if (ieee80211_has_fromds(fc)) - bssid = hdr->addr2; - else - bssid = hdr->addr3; - - return bssid; -} - -static inline bool check_hw_ready(struct rtw_dev *rtwdev, - u32 addr, u32 mask, u32 target) -{ - u32 cnt; - - for (cnt = 0; cnt < 1000; cnt++) { - if (rtw_read32_mask(rtwdev, addr, mask) == target) - return true; - - udelay(10); - } - - return false; -} - -#define rtw_iterate_vifs(rtwdev, iterator, data) \ - ieee80211_iterate_active_interfaces(rtwdev->hw, \ - IEEE80211_IFACE_ITER_NORMAL, iterator, data) -#define rtw_iterate_vifs_atomic(rtwdev, iterator, data) \ - ieee80211_iterate_active_interfaces_atomic(rtwdev->hw, \ - IEEE80211_IFACE_ITER_NORMAL, iterator, data) -#define rtw_iterate_stas_atomic(rtwdev, iterator, data) \ - ieee80211_iterate_stations_atomic(rtwdev->hw, iterator, data) - void rtw_get_channel_params(struct cfg80211_chan_def *chandef, struct rtw_channel_params *ch_param); +bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target); +bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val); +bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value); +void rtw_restore_reg(struct rtw_dev *rtwdev, + struct rtw_backup_info *bckp, u32 num); void rtw_set_channel(struct rtw_dev *rtwdev); void rtw_vif_port_config(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif, u32 config); diff --git a/drivers/net/wireless/realtek/rtw88/util.c b/drivers/net/wireless/realtek/rtw88/util.c new file mode 100644 index 0000000..9a03a40 --- /dev/null +++ b/drivers/net/wireless/realtek/rtw88/util.c @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright(c) 2018 Realtek Corporation. + */ + +#include "main.h" +#include "util.h" +#include "reg.h" + +bool check_hw_ready(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 target) +{ + u32 cnt; + + for (cnt = 0; cnt < 1000; cnt++) { + if (rtw_read32_mask(rtwdev, addr, mask) == target) + return true; + + udelay(10); + } + + return false; +} + +bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val) +{ + if (!check_hw_ready(rtwdev, LTECOEX_ACCESS_CTRL, LTECOEX_READY, 1)) + return false; + + rtw_write32(rtwdev, LTECOEX_ACCESS_CTRL, 0x800F0000 | offset); + *val = rtw_read32(rtwdev, LTECOEX_READ_DATA); + + return true; +} + +bool ltecoex_reg_write(struct rtw_dev *rtwdev, u16 offset, u32 value) +{ + if (!check_hw_ready(rtwdev, LTECOEX_ACCESS_CTRL, LTECOEX_READY, 1)) + return false; + + rtw_write32(rtwdev, LTECOEX_WRITE_DATA, value); + rtw_write32(rtwdev, LTECOEX_ACCESS_CTRL, 0xC00F0000 | offset); + + return true; +} + +void rtw_restore_reg(struct rtw_dev *rtwdev, + struct rtw_backup_info *bckp, u32 num) +{ + u8 len; + u32 reg; + u32 val; + int i; + + for (i = 0; i < num; i++, bckp++) { + len = bckp->len; + reg = bckp->reg; + val = bckp->val; + + switch (len) { + case 1: + rtw_write8(rtwdev, reg, (u8)val); + break; + case 2: + rtw_write16(rtwdev, reg, (u16)val); + break; + case 4: + rtw_write32(rtwdev, reg, (u32)val); + break; + default: + break; + } + } +} diff --git a/drivers/net/wireless/realtek/rtw88/util.h b/drivers/net/wireless/realtek/rtw88/util.h new file mode 100644 index 0000000..aa8f07b --- /dev/null +++ b/drivers/net/wireless/realtek/rtw88/util.h @@ -0,0 +1,34 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright(c) 2018 Realtek Corporation. + */ + +#ifndef __RTW_UTIL_H__ +#define __RTW_UTIL_H__ + +struct rtw_dev; + +#define rtw_iterate_vifs(rtwdev, iterator, data) \ + ieee80211_iterate_active_interfaces(rtwdev->hw, \ + IEEE80211_IFACE_ITER_NORMAL, iterator, data) +#define rtw_iterate_vifs_atomic(rtwdev, iterator, data) \ + ieee80211_iterate_active_interfaces_atomic(rtwdev->hw, \ + IEEE80211_IFACE_ITER_NORMAL, iterator, data) +#define rtw_iterate_stas_atomic(rtwdev, iterator, data) \ + ieee80211_iterate_stations_atomic(rtwdev->hw, iterator, data) + +static inline u8 *get_hdr_bssid(struct ieee80211_hdr *hdr) +{ + __le16 fc = hdr->frame_control; + u8 *bssid; + + if (ieee80211_has_tods(fc)) + bssid = hdr->addr1; + else if (ieee80211_has_fromds(fc)) + bssid = hdr->addr2; + else + bssid = hdr->addr3; + + return bssid; +} + +#endif From patchwork Thu Feb 14 08:58:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812071 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 571DD13BF for ; Thu, 14 Feb 2019 08:59:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 45C172D1F6 for ; Thu, 14 Feb 2019 08:59:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 398012D46D; Thu, 14 Feb 2019 08:59:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E03CB2D1F6 for ; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391148AbfBNI7v (ORCPT ); Thu, 14 Feb 2019 03:59:51 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39629 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388411AbfBNI7p (ORCPT ); Thu, 14 Feb 2019 03:59:45 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xONh005896, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xONh005896 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:24 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:23 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 16/24] rtw88: 8822c: add support for DACK Date: Thu, 14 Feb 2019 16:58:55 +0800 Message-ID: <1550134743-17443-17-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang 8822c needs to calibrate dac to have a stable RF characteristics. This calibration routine is static, means it only needs to be done once after the hardware is powered on. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 605 ++++++++++++++++++++++++++ drivers/net/wireless/realtek/rtw88/rtw8822c.h | 5 + 2 files changed, 610 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 9c3f0f1..df76ce6 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -66,6 +66,610 @@ static void rtw8822c_header_file_init(struct rtw_dev *rtwdev, bool pre) rtw_write32_set(rtwdev, REG_ENCCK, BIT_CCK_OFDM_BLK_EN); } +static void rtw8822c_dac_backup_reg(struct rtw_dev *rtwdev, + struct rtw_backup_info *backup, + struct rtw_backup_info *backup_rf) +{ + u32 path, i; + u32 val; + u32 reg; + u32 rf_addr[DACK_RF_8822C] = {0x8f}; + u32 addrs[DACK_REG_8822C] = {0x180c, 0x1810, 0x410c, 0x4110, + 0x1c3c, 0x1c24, 0x1d70, 0x9b4, + 0x1a00, 0x1a14, 0x1d58, 0x1c38, + 0x1e24, 0x1e28, 0x1860, 0x4160}; + + for (i = 0; i < DACK_REG_8822C; i++) { + backup[i].len = 4; + backup[i].reg = addrs[i]; + backup[i].val = rtw_read32(rtwdev, addrs[i]); + } + + for (path = 0; path < DACK_PATH_8822C; path++) { + for (i = 0; i < DACK_RF_8822C; i++) { + reg = rf_addr[i]; + val = rtw_read_rf(rtwdev, path, reg, RFREG_MASK); + backup_rf[path * i + i].reg = reg; + backup_rf[path * i + i].val = val; + } + } +} + +static void rtw8822c_dac_restore_reg(struct rtw_dev *rtwdev, + struct rtw_backup_info *backup, + struct rtw_backup_info *backup_rf) +{ + u32 path, i; + u32 val; + u32 reg; + + rtw_restore_reg(rtwdev, backup, DACK_REG_8822C); + + for (path = 0; path < DACK_PATH_8822C; path++) { + for (i = 0; i < DACK_RF_8822C; i++) { + val = backup_rf[path * i + i].val; + reg = backup_rf[path * i + i].reg; + rtw_write_rf(rtwdev, path, reg, RFREG_MASK, val); + } + } +} + +static void rtw8822c_rf_minmax_cmp(struct rtw_dev *rtwdev, u32 value, + u32 *min, u32 *max) +{ + if (value >= 0x200) { + if (*min >= 0x200) { + if (*min > value) + *min = value; + } else { + *min = value; + } + if (*max >= 0x200) { + if (*max < value) + *max = value; + } + } else { + if (*min < 0x200) { + if (*min > value) + *min = value; + } + + if (*max >= 0x200) { + *max = value; + } else { + if (*max < value) + *max = value; + } + } +} + +static void swap_u32(u32 *v1, u32 *v2) +{ + u32 tmp; + + tmp = *v1; + *v1 = *v2; + *v2 = tmp; +} + +static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, u32 *v1, u32 *v2) +{ + if (*v1 >= 0x200 && *v2 >= 0x200) { + if (*v1 > *v2) + swap_u32(v1, v2); + } else if (*v1 < 0x200 && *v2 < 0x200) { + if (*v1 > *v2) + swap_u32(v1, v2); + } else if (*v1 < 0x200 && *v2 >= 0x200) { + swap_u32(v1, v2); + } +} + +static void rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, u32 *iv, u32 *qv) +{ + u32 i, j; + + for (i = 0; i < DACK_SN_8822C - 1; i++) { + for (j = 0; j < (DACK_SN_8822C - 1 - i) ; j++) { + __rtw8822c_dac_iq_sort(rtwdev, &iv[j], &iv[j + 1]); + __rtw8822c_dac_iq_sort(rtwdev, &qv[j], &qv[j + 1]); + } + } +} + +static void rtw8822c_dac_iq_offset(struct rtw_dev *rtwdev, u32 *vec, u32 *val) +{ + u32 p, m, t, i; + + m = 0; + p = 0; + for (i = 10; i < DACK_SN_8822C - 10; i++) { + if (vec[i] > 0x200) + m = (0x400 - vec[i]) + m; + else + p = vec[i] + p; + } + + if (p > m) { + t = p - m; + t = t / (DACK_SN_8822C - 20); + } else { + t = m - p; + t = t / (DACK_SN_8822C - 20); + if (t != 0x0) + t = 0x400 - t; + } + + *val = t; +} + +static u32 rtw8822c_get_path_base_addr(u8 path) +{ + u32 base_addr; + + switch (path) { + case RF_PATH_A: + base_addr = 0x1800; + break; + case RF_PATH_B: + base_addr = 0x4100; + break; + default: + WARN_ON(1); + return -1; + } + + return base_addr; +} + +static bool rtw8822c_dac_iq_check(struct rtw_dev *rtwdev, u32 value) +{ + bool ret = true; + + if ((value >= 0x200 && (0x400 - value) > 0x64) || + (value < 0x200 && value > 0x64)) { + ret = false; + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] Error overflow\n"); + } + + return ret; +} + +static void rtw8822c_dac_cal_iq_sample(struct rtw_dev *rtwdev, u32 *iv, u32 *qv) +{ + u32 temp; + int i = 0, cnt = 0; + + while (i < DACK_SN_8822C && cnt < 10000) { + cnt++; + temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); + iv[i] = (temp & 0x3ff000) >> 12; + qv[i] = temp & 0x3ff; + + if (rtw8822c_dac_iq_check(rtwdev, iv[i]) && + rtw8822c_dac_iq_check(rtwdev, qv[i])) + i++; + } +} + +static void rtw8822c_dac_cal_iq_search(struct rtw_dev *rtwdev, + u32 *iv, u32 *qv, + u32 *i_value, u32 *q_value) +{ + u32 i_max = 0, q_max = 0, i_min = 0, q_min = 0; + u32 i_delta, q_delta; + u32 temp; + int i, cnt = 0; + + do { + i_min = iv[0]; + i_max = iv[0]; + q_min = qv[0]; + q_max = qv[0]; + for (i = 0; i < DACK_SN_8822C; i++) { + rtw8822c_rf_minmax_cmp(rtwdev, iv[i], &i_min, &i_max); + rtw8822c_rf_minmax_cmp(rtwdev, qv[i], &q_min, &q_max); + } + + if (i_max < 0x200 && i_min < 0x200) + i_delta = i_max - i_min; + else if (i_max >= 0x200 && i_min >= 0x200) + i_delta = i_max - i_min; + else + i_delta = i_max + (0x400 - i_min); + + if (q_max < 0x200 && q_min < 0x200) + q_delta = q_max - q_min; + else if (q_max >= 0x200 && q_min >= 0x200) + q_delta = q_max - q_min; + else + q_delta = q_max + (0x400 - q_min); + + rtw_dbg(rtwdev, RTW_DBG_RFK, + "[DACK] i: min=0x%08x, max=0x%08x, delta=0x%08x\n", + i_min, i_max, i_delta); + rtw_dbg(rtwdev, RTW_DBG_RFK, + "[DACK] q: min=0x%08x, max=0x%08x, delta=0x%08x\n", + q_min, q_max, q_delta); + + rtw8822c_dac_iq_sort(rtwdev, iv, qv); + + if (i_delta > 5 || q_delta > 5) { + temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); + iv[0] = (temp & 0x3ff000) >> 12; + qv[0] = temp & 0x3ff; + temp = rtw_read32_mask(rtwdev, 0x2dbc, 0x3fffff); + iv[DACK_SN_8822C - 1] = (temp & 0x3ff000) >> 12; + qv[DACK_SN_8822C - 1] = temp & 0x3ff; + } else { + break; + } + } while (cnt++ < 100); + + rtw8822c_dac_iq_offset(rtwdev, iv, i_value); + rtw8822c_dac_iq_offset(rtwdev, qv, q_value); +} + +static void rtw8822c_dac_cal_rf_mode(struct rtw_dev *rtwdev, + u32 *i_value, u32 *q_value) +{ + u32 iv[DACK_SN_8822C], qv[DACK_SN_8822C]; + u32 rf_a, rf_b; + + mdelay(10); + + rf_a = rtw_read_rf(rtwdev, RF_PATH_A, 0x0, RFREG_MASK); + rf_b = rtw_read_rf(rtwdev, RF_PATH_B, 0x0, RFREG_MASK); + + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] RF path-A=0x%05x\n", rf_a); + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] RF path-B=0x%05x\n", rf_b); + + rtw8822c_dac_cal_iq_sample(rtwdev, iv, qv); + rtw8822c_dac_cal_iq_search(rtwdev, iv, qv, i_value, q_value); +} + +static void rtw8822c_dac_bb_setting(struct rtw_dev *rtwdev) +{ + rtw_write32_mask(rtwdev, 0x1d58, 0xff8, 0x1ff); + rtw_write32_mask(rtwdev, 0x1a00, 0x3, 0x2); + rtw_write32_mask(rtwdev, 0x1a14, 0x300, 0x3); + rtw_write32(rtwdev, 0x1d70, 0x7e7e7e7e); + rtw_write32_mask(rtwdev, 0x180c, 0x3, 0x0); + rtw_write32_mask(rtwdev, 0x410c, 0x3, 0x0); + rtw_write32(rtwdev, 0x1b00, 0x00000008); + rtw_write8(rtwdev, 0x1bcc, 0x3f); + rtw_write32(rtwdev, 0x1b00, 0x0000000a); + rtw_write8(rtwdev, 0x1bcc, 0x3f); + rtw_write32_mask(rtwdev, 0x1e24, BIT(31), 0x0); + rtw_write32_mask(rtwdev, 0x1e28, 0xf, 0x3); +} + +static void rtw8822c_dac_cal_adc(struct rtw_dev *rtwdev, + u8 path, u32 *adc_ic, u32 *adc_qc) +{ + u32 ic = 0, qc = 0, temp = 0; + u32 base_addr; + u32 path_sel; + int i; + + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] ADCK path(%d)\n", path); + + base_addr = rtw8822c_get_path_base_addr(path); + switch (path) { + case RF_PATH_A: + path_sel = 0xa0000; + break; + case RF_PATH_B: + path_sel = 0x80000; + break; + default: + WARN_ON(1); + return; + } + + /* ADCK step1 */ + rtw_write32_mask(rtwdev, base_addr + 0x30, BIT(30), 0x0); + if (path == RF_PATH_B) + rtw_write32(rtwdev, base_addr + 0x30, 0x30db8041); + rtw_write32(rtwdev, base_addr + 0x60, 0xf0040ff0); + rtw_write32(rtwdev, base_addr + 0x0c, 0xdff00220); + rtw_write32(rtwdev, base_addr + 0x10, 0x02dd08c4); + rtw_write32(rtwdev, base_addr + 0x0c, 0x10000260); + rtw_write_rf(rtwdev, RF_PATH_A, 0x0, RFREG_MASK, 0x10000); + rtw_write_rf(rtwdev, RF_PATH_B, 0x0, RFREG_MASK, 0x10000); + for (i = 0; i < 10; i++) { + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] ADCK count=%d\n", i); + rtw_write32(rtwdev, 0x1c3c, path_sel + 0x8003); + rtw_write32(rtwdev, 0x1c24, 0x00010002); + rtw8822c_dac_cal_rf_mode(rtwdev, &ic, &qc); + rtw_dbg(rtwdev, RTW_DBG_RFK, + "[DACK] before: i=0x%x, q=0x%x\n", ic, qc); + + /* compensation value */ + if (ic != 0x0) { + ic = 0x400 - ic; + *adc_ic = ic; + } + if (qc != 0x0) { + qc = 0x400 - qc; + *adc_qc = qc; + } + temp = (ic & 0x3ff) | ((qc & 0x3ff) << 10); + rtw_write32(rtwdev, base_addr + 0x68, temp); + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] ADCK 0x%08x=0x08%x\n", + base_addr + 0x68, temp); + /* check ADC DC offset */ + rtw_write32(rtwdev, 0x1c3c, path_sel + 0x8103); + rtw8822c_dac_cal_rf_mode(rtwdev, &ic, &qc); + rtw_dbg(rtwdev, RTW_DBG_RFK, + "[DACK] after: i=0x%08x, q=0x%08x\n", ic, qc); + if (ic >= 0x200) + ic = 0x400 - ic; + if (qc >= 0x200) + qc = 0x400 - qc; + if (ic < 5 && qc < 5) + break; + } + + /* ADCK step2 */ + rtw_write32(rtwdev, 0x1c3c, 0x00000003); + rtw_write32(rtwdev, base_addr + 0x0c, 0x10000260); + rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c4); + + /* release pull low switch on IQ path */ + rtw_write_rf(rtwdev, path, 0x8f, BIT(13), 0x1); +} + +static void rtw8822c_dac_cal_step1(struct rtw_dev *rtwdev, u8 path) +{ + u32 base_addr; + + base_addr = rtw8822c_get_path_base_addr(path); + + rtw_write32(rtwdev, base_addr + 0x0c, 0xdff00220); + if (path == RF_PATH_A) { + rtw_write32(rtwdev, base_addr + 0x60, 0xf0040ff0); + rtw_write32(rtwdev, 0x1c38, 0xffffffff); + } + rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); + rtw_write32(rtwdev, 0x9b4, 0xdb66db00); + rtw_write32(rtwdev, base_addr + 0xb0, 0x0a11fb88); + rtw_write32(rtwdev, base_addr + 0xbc, 0x0008ff81); + rtw_write32(rtwdev, base_addr + 0xc0, 0x0003d208); + rtw_write32(rtwdev, base_addr + 0xcc, 0x0a11fb88); + rtw_write32(rtwdev, base_addr + 0xd8, 0x0008ff81); + rtw_write32(rtwdev, base_addr + 0xdc, 0x0003d208); + rtw_write32(rtwdev, base_addr + 0xb8, 0x60000000); + mdelay(2); + rtw_write32(rtwdev, base_addr + 0xbc, 0x000aff8d); + mdelay(2); + rtw_write32(rtwdev, base_addr + 0xb0, 0x0a11fb89); + rtw_write32(rtwdev, base_addr + 0xcc, 0x0a11fb89); + mdelay(1); + rtw_write32(rtwdev, base_addr + 0xb8, 0x62000000); + mdelay(20); + rtw_write32(rtwdev, base_addr + 0xd4, 0x62000000); + mdelay(20); + rtw_write32(rtwdev, base_addr + 0xb8, 0x02000000); + mdelay(20); + rtw_write32(rtwdev, base_addr + 0xbc, 0x0008ff87); + rtw_write32(rtwdev, 0x9b4, 0xdb6db600); + rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); + rtw_write32(rtwdev, base_addr + 0xbc, 0x0008ff87); + rtw_write32(rtwdev, base_addr + 0x60, 0xf0000000); +} + +static void rtw8822c_dac_cal_step2(struct rtw_dev *rtwdev, + u8 path, u32 *ic_out, u32 *qc_out) +{ + u32 base_addr; + u32 ic, qc, ic_in, qc_in; + + base_addr = rtw8822c_get_path_base_addr(path); + rtw_write32_mask(rtwdev, base_addr + 0xbc, 0xf0000000, 0x0); + rtw_write32_mask(rtwdev, base_addr + 0xc0, 0xf, 0x8); + rtw_write32_mask(rtwdev, base_addr + 0xd8, 0xf0000000, 0x0); + rtw_write32_mask(rtwdev, base_addr + 0xdc, 0xf, 0x8); + + rtw_write32(rtwdev, 0x1b00, 0x00000008); + rtw_write8(rtwdev, 0x1bcc, 0x03f); + rtw_write32(rtwdev, base_addr + 0x0c, 0xdff00220); + rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); + rtw_write32(rtwdev, 0x1c3c, 0x00088103); + + rtw8822c_dac_cal_rf_mode(rtwdev, &ic_in, &qc_in); + ic = ic_in; + qc = qc_in; + + /* compensation value */ + if (ic != 0x0) + ic = 0x400 - ic; + if (qc != 0x0) + qc = 0x400 - qc; + if (ic < 0x300) { + ic = ic * 2 * 6 / 5; + ic = ic + 0x80; + } else { + ic = (0x400 - ic) * 2 * 6 / 5; + ic = 0x7f - ic; + } + if (qc < 0x300) { + qc = qc * 2 * 6 / 5; + qc = qc + 0x80; + } else { + qc = (0x400 - qc) * 2 * 6 / 5; + qc = 0x7f - qc; + } + + *ic_out = ic; + *qc_out = qc; + + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] before i=0x%x, q=0x%x\n", ic_in, qc_in); + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] after i=0x%x, q=0x%x\n", ic, qc); +} + +static void rtw8822c_dac_cal_step3(struct rtw_dev *rtwdev, u8 path, + u32 adc_ic, u32 adc_qc, + u32 *ic_in, u32 *qc_in, + u32 *i_out, u32 *q_out) +{ + u32 base_addr; + u32 ic, qc; + u32 temp; + + base_addr = rtw8822c_get_path_base_addr(path); + ic = *ic_in; + qc = *qc_in; + + rtw_write32(rtwdev, base_addr + 0x0c, 0xdff00220); + rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); + rtw_write32(rtwdev, 0x9b4, 0xdb66db00); + rtw_write32(rtwdev, base_addr + 0xb0, 0x0a11fb88); + rtw_write32(rtwdev, base_addr + 0xbc, 0xc008ff81); + rtw_write32(rtwdev, base_addr + 0xc0, 0x0003d208); + rtw_write32_mask(rtwdev, base_addr + 0xbc, 0xf0000000, ic & 0xf); + rtw_write32_mask(rtwdev, base_addr + 0xc0, 0xf, (ic & 0xf0) >> 4); + rtw_write32(rtwdev, base_addr + 0xcc, 0x0a11fb88); + rtw_write32(rtwdev, base_addr + 0xd8, 0xe008ff81); + rtw_write32(rtwdev, base_addr + 0xdc, 0x0003d208); + rtw_write32_mask(rtwdev, base_addr + 0xd8, 0xf0000000, qc & 0xf); + rtw_write32_mask(rtwdev, base_addr + 0xdc, 0xf, (qc & 0xf0) >> 4); + rtw_write32(rtwdev, base_addr + 0xb8, 0x60000000); + mdelay(2); + rtw_write32_mask(rtwdev, base_addr + 0xbc, 0xe, 0x6); + mdelay(2); + rtw_write32(rtwdev, base_addr + 0xb0, 0x0a11fb89); + rtw_write32(rtwdev, base_addr + 0xcc, 0x0a11fb89); + mdelay(1); + rtw_write32(rtwdev, base_addr + 0xb8, 0x62000000); + mdelay(20); + rtw_write32(rtwdev, base_addr + 0xd4, 0x62000000); + mdelay(20); + rtw_write32(rtwdev, base_addr + 0xb8, 0x02000000); + mdelay(20); + rtw_write32_mask(rtwdev, base_addr + 0xbc, 0xe, 0x3); + rtw_write32(rtwdev, 0x9b4, 0xdb6db600); + + /* check DAC DC offset */ + temp = ((adc_ic + 0x10) & 0x3ff) | (((adc_qc + 0x10) & 0x3ff) << 10); + rtw_write32(rtwdev, base_addr + 0x68, temp); + rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c5); + rtw_write32(rtwdev, base_addr + 0x60, 0xf0000000); + rtw8822c_dac_cal_rf_mode(rtwdev, &ic, &qc); + if (ic >= 0x10) + ic = ic - 0x10; + else + ic = 0x400 - (0x10 - ic); + + if (qc >= 0x10) + qc = qc - 0x10; + else + qc = 0x400 - (0x10 - qc); + + *i_out = ic; + *q_out = qc; + + if (ic >= 0x200) + ic = 0x400 - ic; + if (qc >= 0x200) + qc = 0x400 - qc; + + *ic_in = ic; + *qc_in = qc; + + rtw_dbg(rtwdev, RTW_DBG_RFK, + "[DACK] after DACK i=0x%x, q=0x%x\n", *i_out, *q_out); +} + +static void rtw8822c_dac_cal_step4(struct rtw_dev *rtwdev, u8 path) +{ + u32 base_addr = rtw8822c_get_path_base_addr(path); + + rtw_write32(rtwdev, base_addr + 0x68, 0x0); + rtw_write32(rtwdev, base_addr + 0x10, 0x02d508c4); + rtw_write32_mask(rtwdev, base_addr + 0xbc, 0x1, 0x0); + rtw_write32_mask(rtwdev, base_addr + 0x30, BIT(30), 0x1); +} + +static void rtw8822c_rf_dac_cal(struct rtw_dev *rtwdev) +{ + struct rtw_backup_info backup_rf[DACK_RF_8822C * DACK_PATH_8822C]; + struct rtw_backup_info backup[DACK_REG_8822C]; + u32 ic = 0, qc = 0, i; + u32 i_a = 0x0, q_a = 0x0, i_b = 0x0, q_b = 0x0; + u32 ic_a = 0x0, qc_a = 0x0, ic_b = 0x0, qc_b = 0x0; + u32 adc_ic_a = 0x0, adc_qc_a = 0x0, adc_ic_b = 0x0, adc_qc_b = 0x0; + + rtw8822c_dac_backup_reg(rtwdev, backup, backup_rf); + + rtw8822c_dac_bb_setting(rtwdev); + + /* path-A */ + rtw8822c_dac_cal_adc(rtwdev, RF_PATH_A, &adc_ic_a, &adc_qc_a); + for (i = 0; i < 10; i++) { + rtw8822c_dac_cal_step1(rtwdev, RF_PATH_A); + rtw8822c_dac_cal_step2(rtwdev, RF_PATH_A, &ic, &qc); + ic_a = ic; + qc_a = qc; + + rtw8822c_dac_cal_step3(rtwdev, RF_PATH_A, adc_ic_a, adc_qc_a, + &ic, &qc, &i_a, &q_a); + + if (ic < 5 && qc < 5) + break; + } + rtw8822c_dac_cal_step4(rtwdev, RF_PATH_A); + + /* path-B */ + rtw8822c_dac_cal_adc(rtwdev, RF_PATH_B, &adc_ic_b, &adc_qc_b); + for (i = 0; i < 10; i++) { + rtw8822c_dac_cal_step1(rtwdev, RF_PATH_B); + rtw8822c_dac_cal_step2(rtwdev, RF_PATH_B, &ic, &qc); + ic_b = ic; + qc_b = qc; + + rtw8822c_dac_cal_step3(rtwdev, RF_PATH_B, adc_ic_b, adc_qc_b, + &ic, &qc, &i_b, &q_b); + + if (ic < 5 && qc < 5) + break; + } + rtw8822c_dac_cal_step4(rtwdev, RF_PATH_B); + + rtw_write32(rtwdev, 0x1b00, 0x00000008); + rtw_write32_mask(rtwdev, 0x4130, BIT(30), 0x1); + rtw_write8(rtwdev, 0x1bcc, 0x0); + rtw_write32(rtwdev, 0x1b00, 0x0000000a); + rtw_write8(rtwdev, 0x1bcc, 0x0); + + rtw8822c_dac_restore_reg(rtwdev, backup, backup_rf); + + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] path A: ic=0x%x, qc=0x%x\n", ic_a, qc_a); + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] path B: ic=0x%x, qc=0x%x\n", ic_b, qc_b); + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] path A: i=0x%x, q=0x%x\n", i_a, q_a); + rtw_dbg(rtwdev, RTW_DBG_RFK, "[DACK] path B: i=0x%x, q=0x%x\n", i_b, q_b); +} + +static void rtw8822c_rf_x2_check(struct rtw_dev *rtwdev) +{ + u8 x2k_busy; + + mdelay(1); + x2k_busy = rtw_read_rf(rtwdev, RF_PATH_A, 0xb8, BIT(15)); + if (x2k_busy == 1) { + rtw_write_rf(rtwdev, RF_PATH_A, 0xb8, RFREG_MASK, 0xC4440); + rtw_write_rf(rtwdev, RF_PATH_A, 0xba, RFREG_MASK, 0x6840D); + rtw_write_rf(rtwdev, RF_PATH_A, 0xb8, RFREG_MASK, 0x80440); + mdelay(1); + } +} + +static void rtw8822c_rf_init(struct rtw_dev *rtwdev) +{ + rtw8822c_rf_dac_cal(rtwdev); + rtw8822c_rf_x2_check(rtwdev); +} + static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev) { struct rtw_dm_info *dm_info = &rtwdev->dm_info; @@ -109,6 +713,7 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev) dm_info->cck_gi_u_bnd = ((cck_gi_u_bnd_msb << 4) | (cck_gi_u_bnd_lsb)); dm_info->cck_gi_l_bnd = ((cck_gi_l_bnd_msb << 4) | (cck_gi_l_bnd_lsb)); + rtw8822c_rf_init(rtwdev); /* wifi path controller */ rtw_write32_mask(rtwdev, 0x70, 0xff000000, 0x0e); rtw_write32_mask(rtwdev, 0x1704, 0xffffffff, 0x7700); diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h index fa71104..6a64640 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h @@ -96,6 +96,11 @@ struct rtw8822c_efuse { }; }; +#define DACK_PATH_8822C 2 +#define DACK_REG_8822C 16 +#define DACK_RF_8822C 1 +#define DACK_SN_8822C 100 + /* phy status page0 */ #define GET_PHY_STAT_P0_PWDB_A(phy_stat) \ le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8)) From patchwork Thu Feb 14 08:58:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812079 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7FC8117E0 for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6E9432D46D for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 629D22D471; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CC2872D46D for ; Thu, 14 Feb 2019 09:00:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731339AbfBNI76 (ORCPT ); Thu, 14 Feb 2019 03:59:58 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39609 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730797AbfBNI7l (ORCPT ); Thu, 14 Feb 2019 03:59:41 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xO2h005900, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xO2h005900 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:25 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:24 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 17/24] rtw88: 8822c: fix RSC setting Date: Thu, 14 Feb 2019 16:58:56 +0800 Message-ID: <1550134743-17443-18-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang Hardware default value is 0x11 and its wrong. Set [22:21] to zero for primary 20Mhz BW mode. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 + drivers/net/wireless/realtek/rtw88/rtw8822c.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index df76ce6..74cbf4e 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -857,6 +857,7 @@ static int rtw8822c_mac_init(struct rtw_dev *rtwdev) rtw_write8(rtwdev, REG_FAST_EDCA_BEBK_SETTING + 2, FAST_EDCA_BK_TH); /* close BA parser */ rtw_write8_clr(rtwdev, REG_LIFETIME_EN, BIT_BA_PARSER_EN); + rtw_write32_clr(rtwdev, REG_RRSR, BITS_RRSR_RSC); /* EDCA configuration */ rtw_write32(rtwdev, REG_EDCA_VO_PARAM, WLAN_EDCA_VO_PARAM); diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h index 6a64640..74396ad 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h @@ -123,6 +123,8 @@ struct rtw8822c_efuse { #define REG_ANAPARLDO_POW_MAC 0x0029 #define BIT_LDOE25_PON BIT(0) +#define REG_RRSR 0x0440 +#define BITS_RRSR_RSC (BIT(21) | BIT(22)) #define REG_TXDFIR0 0x808 #define REG_DFIRBW 0x810 From patchwork Thu Feb 14 08:58:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812069 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B363417E0 for ; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A308F2D460 for ; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 96CA22D48E; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3F08F2D460 for ; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388428AbfBNI7o (ORCPT ); Thu, 14 Feb 2019 03:59:44 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39620 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732405AbfBNI7m (ORCPT ); Thu, 14 Feb 2019 03:59:42 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xPFp005904, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xPFp005904 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:25 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:25 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 18/24] rtw88: 8822c: set ack timeout Date: Thu, 14 Feb 2019 16:58:57 +0800 Message-ID: <1550134743-17443-19-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang For 8822C, driver needs to set ack timeout after hardware powered-on. There are two values required for both CCK and OFDM rate sets. But only OFDM ack timeout was set, and the value did not meet the hardware specification (aSIFSTime + aSlotTime). For CCK, the ack timeout should be 106us and for OFDM it should be 33us. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/reg.h | 1 + drivers/net/wireless/realtek/rtw88/rtw8822c.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h index 8d8dbc5..27732a1 100644 --- a/drivers/net/wireless/realtek/rtw88/reg.h +++ b/drivers/net/wireless/realtek/rtw88/reg.h @@ -283,6 +283,7 @@ #define REG_RX_DRVINFO_SZ 0x060F #define BIT_APP_PHYSTS BIT(28) #define REG_USTIME_EDCA 0x0638 +#define REG_ACKTO_CCK 0x0639 #define REG_RESP_SIFS_CCK 0x063C #define REG_RESP_SIFS_OFDM 0x063E #define REG_ACKTO 0x0640 diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 74cbf4e..4bde3fc 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -772,7 +772,8 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev) #define WLAN_BAR_ACK_TYPE 0x05 #define WLAN_RA_TRY_RATE_AGG_LIMIT 0x08 #define WLAN_RESP_TXRATE 0x84 -#define WLAN_ACK_TO 0x40 +#define WLAN_ACK_TO 0x21 +#define WLAN_ACK_TO_CCK 0x6A #define WLAN_DATA_RATE_FB_CNT_1_4 0x01000000 #define WLAN_DATA_RATE_FB_CNT_5_8 0x08070504 #define WLAN_RTS_RATE_FB_CNT_5_8 0x08070504 @@ -894,6 +895,7 @@ static int rtw8822c_mac_init(struct rtw_dev *rtwdev) /* WMAC configuration */ rtw_write8(rtwdev, REG_BBPSF_CTRL + 2, WLAN_RESP_TXRATE); rtw_write8(rtwdev, REG_ACKTO, WLAN_ACK_TO); + rtw_write8(rtwdev, REG_ACKTO_CCK, WLAN_ACK_TO_CCK); rtw_write16(rtwdev, REG_EIFS, WLAN_EIFS_DUR_TUNE); rtw_write8(rtwdev, REG_NAV_CTRL + 2, WLAN_NAV_MAX); rtw_write8(rtwdev, REG_WMAC_TRXPTCL_CTL_H + 2, WLAN_BAR_ACK_TYPE); From patchwork Thu Feb 14 08:58:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812077 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2E2531399 for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 18A0229CA7 for ; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0728D2D48E; Thu, 14 Feb 2019 09:00:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8A4002D1F6 for ; Thu, 14 Feb 2019 08:59:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392161AbfBNI7y (ORCPT ); Thu, 14 Feb 2019 03:59:54 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39623 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732827AbfBNI7n (ORCPT ); Thu, 14 Feb 2019 03:59:43 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xQ3n005909, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xQ3n005909 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:26 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:25 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 19/24] rtw88: 8822c: do not reset MAC Rx before sending CCK packet Date: Thu, 14 Feb 2019 16:58:58 +0800 Message-ID: <1550134743-17443-20-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang Hardware can enter low power RX mode. If we enable CCKRST under this mode will cause BB hang. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 4bde3fc..d20f45f 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -917,7 +917,7 @@ static int rtw8822c_mac_init(struct rtw_dev *rtwdev) value16 = BIT_SET_RXPSF_PKTLENTHR(value16, 1); value16 |= BIT_RXPSF_CTRLEN | BIT_RXPSF_VHTCHKEN | BIT_RXPSF_HTCHKEN | BIT_RXPSF_OFDMCHKEN | BIT_RXPSF_CCKCHKEN - | BIT_RXPSF_OFDMRST | BIT_RXPSF_CCKRST; + | BIT_RXPSF_OFDMRST; rtw_write16(rtwdev, REG_RXPSF_CTRL, value16); rtw_write32(rtwdev, REG_RXPSF_TYPE_CTRL, 0xFFFFFFFF); /* rx ignore configuration */ From patchwork Thu Feb 14 08:58:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812067 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A4FE01399 for ; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 904F02D1F6 for ; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 84B6D2D47E; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1CDF72D1F6 for ; Thu, 14 Feb 2019 08:59:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389409AbfBNI7p (ORCPT ); Thu, 14 Feb 2019 03:59:45 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39626 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387827AbfBNI7o (ORCPT ); Thu, 14 Feb 2019 03:59:44 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xRFN005916, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xRFN005916 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:27 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:26 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 20/24] rtw88: 8822c: parse packet by sigb length Date: Thu, 14 Feb 2019 16:58:59 +0800 Message-ID: <1550134743-17443-21-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang Based on current hardware setting, if we parse packet by LSIG, driver will not receive phy status report from hardware. To fix it, parse packet by SIGB length. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index d20f45f..3e22597 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -788,7 +788,7 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev) #define WLAN_TX_FUNC_CFG1 0x30 #define WLAN_TX_FUNC_CFG2 0x30 -#define WLAN_MAC_OPT_NORM_FUNC1 0x90 +#define WLAN_MAC_OPT_NORM_FUNC1 0x98 #define WLAN_MAC_OPT_LB_FUNC1 0x80 #define WLAN_MAC_OPT_FUNC2 0x30810041 From patchwork Thu Feb 14 08:59:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812059 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 35DAC17E0 for ; Thu, 14 Feb 2019 08:59:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 24A252D460 for ; Thu, 14 Feb 2019 08:59:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1938E2D48E; Thu, 14 Feb 2019 08:59:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9A9A82D460 for ; Thu, 14 Feb 2019 08:59:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390651AbfBNI7q (ORCPT ); Thu, 14 Feb 2019 03:59:46 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39624 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733184AbfBNI7o (ORCPT ); Thu, 14 Feb 2019 03:59:44 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xS5e005920, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xS5e005920 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:28 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:27 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 21/24] rtw88: do not count dummy tail into rx counter Date: Thu, 14 Feb 2019 16:59:00 +0800 Message-ID: <1550134743-17443-22-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang If BIT_DUMMY_FCS_READY_MASK_EN is not enabled, hardware will not mask out dummy tails and takes them into VHT rx count. Enable the mask to get expected RX counter. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/reg.h | 2 ++ drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 + 2 files changed, 3 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h index 27732a1..97bcd90 100644 --- a/drivers/net/wireless/realtek/rtw88/reg.h +++ b/drivers/net/wireless/realtek/rtw88/reg.h @@ -396,6 +396,8 @@ (BIT_CLEAR_RXPSF_ERRTHR(x) | BIT_RXPSF_ERRTHR(v)) #define REG_RXPSF_TYPE_CTRL 0x1614 +#define REG_GENERAL_OPTION 0x1664 +#define BIT_DUMMY_FCS_READY_MASK_EN BIT(9) #define REG_WL2LTECOEX_INDIRECT_ACCESS_CTRL_V1 0x1700 #define REG_WL2LTECOEX_INDIRECT_ACCESS_WRITE_DATA_V1 0x1704 diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 3e22597..ec0e62f 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -905,6 +905,7 @@ static int rtw8822c_mac_init(struct rtw_dev *rtwdev) rtw_write8(rtwdev, REG_RX_PKT_LIMIT, WLAN_RXPKT_MAX_SZ_512); rtw_write8(rtwdev, REG_TCR + 2, WLAN_TX_FUNC_CFG2); rtw_write8(rtwdev, REG_TCR + 1, WLAN_TX_FUNC_CFG1); + rtw_write32_set(rtwdev, REG_GENERAL_OPTION, BIT_DUMMY_FCS_READY_MASK_EN); rtw_write32(rtwdev, REG_WMAC_OPTION_FUNCTION + 8, WLAN_MAC_OPT_FUNC2); rtw_write8(rtwdev, REG_WMAC_OPTION_FUNCTION_1, WLAN_MAC_OPT_NORM_FUNC1); From patchwork Thu Feb 14 08:59:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812061 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CCBAB1399 for ; Thu, 14 Feb 2019 08:59:48 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BA85E2D460 for ; Thu, 14 Feb 2019 08:59:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AEB672D471; Thu, 14 Feb 2019 08:59:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BB7732D46D for ; Thu, 14 Feb 2019 08:59:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390472AbfBNI7q (ORCPT ); Thu, 14 Feb 2019 03:59:46 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39625 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387436AbfBNI7o (ORCPT ); Thu, 14 Feb 2019 03:59:44 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xSkw005924, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xSkw005924 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:28 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:28 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 22/24] rtw88: set OFDM ctx to receive ack after cts2self Date: Thu, 14 Feb 2019 16:59:01 +0800 Message-ID: <1550134743-17443-23-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang 8822B originally set OFDM CTX to 0xA, but this period was too short to receive ack, enlarge it to 0xE to fix it. For 8822C, also set it to the same value to synchronize their behavior. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 +- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c index 95af97f..76a5a64 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c @@ -127,7 +127,7 @@ static void rtw8822b_phy_set_param(struct rtw_dev *rtwdev) #define WLAN_SLOT_TIME 0x05 #define WLAN_PIFS_TIME 0x19 #define WLAN_SIFS_CCK_CONT_TX 0xA -#define WLAN_SIFS_OFDM_CONT_TX 0xA +#define WLAN_SIFS_OFDM_CONT_TX 0xE #define WLAN_SIFS_CCK_TRX 0x10 #define WLAN_SIFS_OFDM_TRX 0x10 #define WLAN_VO_TXOP_LIMIT 0x186 /* unit : 32us */ diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index ec0e62f..83dfb1d 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -726,7 +726,7 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev) #define WLAN_SLOT_TIME 0x05 #define WLAN_PIFS_TIME 0x1C #define WLAN_SIFS_CCK_CONT_TX 0x0A -#define WLAN_SIFS_OFDM_CONT_TX 0x10 +#define WLAN_SIFS_OFDM_CONT_TX 0x0E #define WLAN_SIFS_CCK_TRX 0x0A #define WLAN_SIFS_OFDM_TRX 0x10 #define WLAN_NAV_MAX 0xC8 From patchwork Thu Feb 14 08:59:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812063 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9679413BF for ; Thu, 14 Feb 2019 08:59:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 870732D1F6 for ; Thu, 14 Feb 2019 08:59:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7B9372D46D; Thu, 14 Feb 2019 08:59:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0DA792D460 for ; Thu, 14 Feb 2019 08:59:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390919AbfBNI7r (ORCPT ); Thu, 14 Feb 2019 03:59:47 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39631 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389174AbfBNI7q (ORCPT ); Thu, 14 Feb 2019 03:59:46 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xT0U005931, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xT0U005931 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:29 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:28 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 23/24] rtw88: fix slot time value Date: Thu, 14 Feb 2019 16:59:02 +0800 Message-ID: <1550134743-17443-24-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang IEEE802.11 spec defines slot time as 9us, fix it for TX engine. If the slot time is wrong, transmitting beacon might fail. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 +- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c index 76a5a64..474f952 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c @@ -124,7 +124,7 @@ static void rtw8822b_phy_set_param(struct rtw_dev *rtwdev) rtw_write8(rtwdev, 0xcbd, 0x2); } -#define WLAN_SLOT_TIME 0x05 +#define WLAN_SLOT_TIME 0x09 #define WLAN_PIFS_TIME 0x19 #define WLAN_SIFS_CCK_CONT_TX 0xA #define WLAN_SIFS_OFDM_CONT_TX 0xE diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 83dfb1d..b6e73dd 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -723,7 +723,7 @@ static void rtw8822c_phy_set_param(struct rtw_dev *rtwdev) } #define WLAN_TXQ_RPT_EN 0x1F -#define WLAN_SLOT_TIME 0x05 +#define WLAN_SLOT_TIME 0x09 #define WLAN_PIFS_TIME 0x1C #define WLAN_SIFS_CCK_CONT_TX 0x0A #define WLAN_SIFS_OFDM_CONT_TX 0x0E From patchwork Thu Feb 14 08:59:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Chuang X-Patchwork-Id: 10812065 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A23BF13BF for ; Thu, 14 Feb 2019 08:59:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9184B2D1F6 for ; Thu, 14 Feb 2019 08:59:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 85AD32D46D; Thu, 14 Feb 2019 08:59:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0C0A12D1F6 for ; Thu, 14 Feb 2019 08:59:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391134AbfBNI7t (ORCPT ); Thu, 14 Feb 2019 03:59:49 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:39636 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390954AbfBNI7s (ORCPT ); Thu, 14 Feb 2019 03:59:48 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID x1E8xUeR005936, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtitcasv01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id x1E8xUeR005936 (version=TLSv1 cipher=AES256-SHA bits=256 verify=NOT); Thu, 14 Feb 2019 16:59:30 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.408.0; Thu, 14 Feb 2019 16:59:29 +0800 From: To: , CC: , , , , , Subject: [PATCH v2 24/24] rtw88: 8822b: turn rtw_write32s_mask into macro Date: Thu, 14 Feb 2019 16:59:03 +0800 Message-ID: <1550134743-17443-25-git-send-email-yhchuang@realtek.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> References: <1550134743-17443-1-git-send-email-yhchuang@realtek.com> MIME-Version: 1.0 X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yan-Hsuan Chuang The inlined rtw_write32s_mask has to check range of addr with BUILD_BUG_ON. But with some variants of gcc version the function might not get inlined, and it will have no idea to know how to do, then results in a compile error. Turn it into a macro to make sure the values are known when compile time. Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 10 ---------- drivers/net/wireless/realtek/rtw88/rtw8822b.h | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c index 474f952..7432c37 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c @@ -224,16 +224,6 @@ static int rtw8822b_mac_init(struct rtw_dev *rtwdev) return 0; } -static inline void -rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data) -{ - BUILD_BUG_ON(addr < 0xC00 || addr >= 0xD00); - - rtw_write32_mask(rtwdev, addr, mask, data); - /* 0xC00-0xCFF and 0xE00-0xEFF have the same layout */ - rtw_write32_mask(rtwdev, addr + 0x200, mask, data); -} - static void rtw8822b_set_channel_rfe_efem(struct rtw_dev *rtwdev, u8 channel) { struct rtw_hal *hal = &rtwdev->hal; diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.h b/drivers/net/wireless/realtek/rtw88/rtw8822b.h index 311fe8a..8036e30 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h @@ -97,6 +97,21 @@ struct rtw8822b_efuse { }; }; +static inline void +_rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data) +{ + /* 0xC00-0xCFF and 0xE00-0xEFF have the same layout */ + rtw_write32_mask(rtwdev, addr, mask, data); + rtw_write32_mask(rtwdev, addr + 0x200, mask, data); +} + +#define rtw_write32s_mask(rtwdev, addr, mask, data) \ + do { \ + BUILD_BUG_ON((addr) < 0xC00 || (addr) >= 0xD00); \ + \ + _rtw_write32s_mask(rtwdev, addr, mask, data); \ + } while (0) + /* phy status page0 */ #define GET_PHY_STAT_P0_PWDB(phy_stat) \ le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8))