rtlwifi: halmac: Add new module halmac
[email protected]
maintainerv3 cover rtlwifi: halmac: Add new module halmac
From: Ping-Ke Shih <[email protected]>
v3: patch 06/17 in v2 is too big, so mail server may block the mail.
In this patchset, I decompose the patch into three patches 06/19-08/19, so in patchset view v2 and v3 are identical.
v2: remove indirection to get halmac ops
Only patches 1/17 and 11/17 are changed.
Patches 1/19-3/19 are added structure to support this module. Patches 4/19-18/19 add new files.
Patch 19/19 add this module to Makefile and Kconfig.
Ping-Ke Shih (19):
rtlwifi: add halmac structure to wifi.h
rtlwifi: add debug ID COMP_HALMAC
rtlwifi: add dmdef.h to share with driver and other modules
rtlwifi: halmac: add main definition used by halmac
rtlwifi: halmac: describe number and size of chip functions
rtlwifi: halmac: add register definitions
rtlwifi: halmac: add bit field definitions
rtlwifi: halmac: add bit field definitions of rtl8822b
rtlwifi: halmac: add definition of TX/RX descriptor
rtlwifi: halmac: add GPIO pin/pinmux definitions
rtlwifi: halmac: add power sequence to turn on/off wifi card
rtlwifi: halmac: access efuse through halmac helper functions
rtlwifi: halmac: add files to implement halmac ops
rtlwifi: halmac: add halmac init/deinit functions
rtlwifi: halmac: add firmware related functions and definitions
rtlwifi: halmac: add bus interface commands
rtlwifi: halmac: add to control WiFi mac functions and registers
rtlwifi: halmac: add to support BB and RF functions
rtlwifi: add halmac to Makefile and Kconfig
drivers/net/wireless/realtek/rtlwifi/Kconfig | 5 + drivers/net/wireless/realtek/rtlwifi/Makefile | 1 + drivers/net/wireless/realtek/rtlwifi/debug.h | 1 + drivers/net/wireless/realtek/rtlwifi/dmdef.h | 40 + .../net/wireless/realtek/rtlwifi/halmac/Makefile | 29 + .../halmac_88xx/halmac_8822b/halmac_8822b_cfg.h | 68 + .../halmac_8822b/halmac_cfg_wmac_8822b.c | 144 + .../halmac_8822b/halmac_cfg_wmac_8822b.h | 36 + .../halmac_88xx/halmac_8822b/halmac_common_8822b.c | 173 + .../halmac_88xx/halmac_8822b/halmac_common_8822b.h | 32 + .../halmac_88xx/halmac_8822b/halmac_gpio_8822b.c | 847 + .../halmac_88xx/halmac_8822b/halmac_gpio_8822b.h | 34 + .../halmac_88xx/halmac_8822b/halmac_init_8822b.c | 688 + .../halmac_88xx/halmac_8822b/halmac_init_8822b.h | 33 + .../halmac_88xx/halmac_8822b/halmac_pcie_8822b.c | 218 + .../halmac_88xx/halmac_8822b/halmac_pcie_8822b.h | 38 + .../halmac_88xx/halmac_8822b/halmac_phy_8822b.c | 148 + .../halmac_8822b/halmac_pwr_seq_8822b.c | 396 + .../halmac_8822b/halmac_pwr_seq_8822b.h | 26 + .../halmac_88xx/halmac_8822b/halmac_sdio_8822b.c | 880 + .../halmac_88xx/halmac_8822b/halmac_sdio_8822b.h | 62 + .../halmac_88xx/halmac_8822b/halmac_usb_8822b.c | 161 + .../halmac_88xx/halmac_8822b/halmac_usb_8822b.h | 38 + .../rtlwifi/halmac/halmac_88xx/halmac_88xx_cfg.h | 40 + .../rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.c | 397 + .../rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.h | 53 + .../halmac/halmac_88xx/halmac_cfg_wmac_88xx.c | 1158 ++ .../halmac/halmac_88xx/halmac_cfg_wmac_88xx.h | 122 + .../halmac/halmac_88xx/halmac_common_88xx.c | 2931 +++ .../halmac/halmac_88xx/halmac_common_88xx.h | 151 + .../rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.c | 1918 ++ .../rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.h | 101 + .../rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.c | 316 + .../rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.h | 35 + .../rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.c | 1149 ++ .../rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.h | 57 + .../rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.c | 415 + .../rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.h | 55 + .../rtlwifi/halmac/halmac_88xx/halmac_init_88xx.c | 1071 ++ .../rtlwifi/halmac/halmac_88xx/halmac_init_88xx.h | 70 + .../rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.c | 869 + .../rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.h | 79 + .../rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.c | 538 + .../rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.h | 98 + .../rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.c | 895 + .../rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.h | 75 + .../rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.c | 522 + .../rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.h | 83 + .../wireless/realtek/rtlwifi/halmac/halmac_api.c | 438 + .../wireless/realtek/rtlwifi/halmac/halmac_api.h | 65 + .../wireless/realtek/rtlwifi/halmac/halmac_bit2.h | 18234 +++++++++++++++++++ .../realtek/rtlwifi/halmac/halmac_bit_8822b.h | 17870 ++++++++++++++++++ .../realtek/rtlwifi/halmac/halmac_fw_info.h | 119 + .../rtlwifi/halmac/halmac_fw_offload_c2h_nic.h | 371 + .../rtlwifi/halmac/halmac_fw_offload_h2c_nic.h | 694 + .../realtek/rtlwifi/halmac/halmac_gpio_cmd.h | 84 + .../rtlwifi/halmac/halmac_h2c_extra_info_nic.h | 171 + .../realtek/rtlwifi/halmac/halmac_intf_phy_cmd.h | 45 + .../rtlwifi/halmac/halmac_original_c2h_nic.h | 408 + .../rtlwifi/halmac/halmac_original_h2c_nic.h | 1143 ++ .../realtek/rtlwifi/halmac/halmac_pcie_reg.h | 36 + .../realtek/rtlwifi/halmac/halmac_pwr_seq_cmd.h | 98 + .../wireless/realtek/rtlwifi/halmac/halmac_reg2.h | 1292 ++ .../realtek/rtlwifi/halmac/halmac_reg_8822b.h | 733 + .../realtek/rtlwifi/halmac/halmac_rx_bd_nic.h | 36 + .../realtek/rtlwifi/halmac/halmac_rx_desc_chip.h | 100 + .../realtek/rtlwifi/halmac/halmac_rx_desc_nic.h | 123 + .../realtek/rtlwifi/halmac/halmac_sdio_reg.h | 53 + .../realtek/rtlwifi/halmac/halmac_state_machine.h | 157 + .../realtek/rtlwifi/halmac/halmac_tx_bd_nic.h | 106 + .../realtek/rtlwifi/halmac/halmac_tx_desc_chip.h | 398 + .../realtek/rtlwifi/halmac/halmac_tx_desc_nic.h | 439 + .../wireless/realtek/rtlwifi/halmac/halmac_type.h | 2134 +++ .../realtek/rtlwifi/halmac/halmac_usb_reg.h | 19 + .../wireless/realtek/rtlwifi/halmac/rtl_halmac.c | 1403 ++ .../wireless/realtek/rtlwifi/halmac/rtl_halmac.h | 77 + drivers/net/wireless/realtek/rtlwifi/wifi.h | 59 + 77 files changed, 64201 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/dmdef.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/Makefile create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_8822b_cfg.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_cfg_wmac_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_cfg_wmac_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_common_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_common_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_gpio_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_gpio_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_init_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_init_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pcie_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pcie_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_phy_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pwr_seq_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pwr_seq_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_sdio_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_sdio_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_usb_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_usb_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_88xx_cfg.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_cfg_wmac_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_cfg_wmac_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_common_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_common_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_init_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_init_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_api.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_api.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_bit2.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_bit_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_info.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_offload_c2h_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_offload_h2c_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_gpio_cmd.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_h2c_extra_info_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_intf_phy_cmd.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_original_c2h_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_original_h2c_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_pcie_reg.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_pwr_seq_cmd.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_reg2.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_reg_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_bd_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_desc_chip.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_desc_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_sdio_reg.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_state_machine.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_bd_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_desc_chip.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_desc_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_type.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_usb_reg.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/rtl_halmac.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/rtl_halmac.h
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 1/19 rtlwifi: add halmac structure to wifi.h
From: Ping-Ke Shih <[email protected]>
Add structure and ops to interact with halmac and other modules.
--- drivers/net/wireless/realtek/rtlwifi/wifi.h | 58 +++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+)
drivers/net/wireless/realtek/rtlwifi/wifi.h +58 -0
@@ -2305,6 +2305,13 @@ struct rtl_hal_ops {u16 (*get_available_desc)(struct ieee80211_hw *hw,u8 q_idx);void (*c2h_content_parsing)(struct ieee80211_hw *hw,u8 tag,u8 len,u8 *val); +/* ops for halmac cb */ +bool (*halmac_cb_init_mac_register)(struct rtl_priv *rtlpriv); +bool (*halmac_cb_init_bb_rf_register)(struct rtl_priv *rtlpriv); +bool (*halmac_cb_write_data_rsvd_page)(struct rtl_priv *rtlpriv, +u8 *buf,u32 size); +bool (*halmac_cb_write_data_h2c)(struct rtl_priv *rtlpriv,u8 *buf, +u32 size); };struct rtl_intf_ops {
@@ -2687,6 +2694,54 @@ struct rtl_btc_ops {bool (*btc_is_bt_lps_on)(struct rtl_priv *rtlpriv); }; +struct rtl_halmac_ops { +int (*halmac_init_adapter)(struct rtl_priv *rtlpriv); +int (*halmac_deinit_adapter)(struct rtl_priv *rtlpriv); +int (*halmac_init_hal)(struct rtl_priv *rtlpriv); +int (*halmac_deinit_hal)(struct rtl_priv *rtlpriv); +int (*halmac_poweron)(struct rtl_priv *rtlpriv); +int (*halmac_poweroff)(struct rtl_priv *rtlpriv); + +int (*halmac_phy_power_switch)(struct rtl_priv *rtlpriv,u8 enable); +int (*halmac_set_mac_address)(struct rtl_priv *rtlpriv,u8 hwport, +u8 *addr); +int (*halmac_set_bssid)(struct rtl_priv *rtlpriv,u8 hwport,u8 *addr); + +int (*halmac_get_physical_efuse_size)(struct rtl_priv *rtlpriv, +u32 *size); +int (*halmac_read_physical_efuse_map)(struct rtl_priv *rtlpriv, +u8 *map,u32 size); +int (*halmac_get_logical_efuse_size)(struct rtl_priv *rtlpriv, +u32 *size); +int (*halmac_read_logical_efuse_map)(struct rtl_priv *rtlpriv,u8 *map, +u32 size); + +int (*halmac_set_bandwidth)(struct rtl_priv *rtlpriv,u8 channel, +u8 pri_ch_idx,u8 bw); + +int (*halmac_c2h_handle)(struct rtl_priv *rtlpriv,u8 *c2h,u32 size); + +int (*halmac_chk_txdesc)(struct rtl_priv *rtlpriv,u8 *txdesc, +u32 size); +int (*halmac_iqk)(struct rtl_priv *rtlpriv,u8 clear,u8 segment); +}; + +struct rtl_halmac_indicator { +struct completion *comp; +u32 wait_ms; + +u8 *buffer; +u32 buf_size; +u32 ret_size; +u32 status; +}; + +struct rtl_halmac { +const struct rtl_halmac_ops *ops; +void *internal;/* internal context of halmac, i.e. PHALMAC_ADAPTER */ +struct rtl_halmac_indicator *indicator;/* size=10 */ +}; +struct proxim {bool proxim_on;
@@ -2792,6 +2847,9 @@ struct rtl_priv {/*for bt coexist use*/ struct bt_coexist_info btcoexist; +/* halmac for newer ICs */ +struct rtl_halmac halmac; +/* separate 92ee from other ICs, * 92ee use new trx flow. */
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 2/19 rtlwifi: add debug ID COMP_HALMAC
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Add a debug ID for the module halmac
--- drivers/net/wireless/realtek/rtlwifi/debug.h | 1 + 1 file changed, 1 insertion(+)
drivers/net/wireless/realtek/rtlwifi/debug.h +1 -0
@@ -106,6 +106,7 @@#define COMP_BT_COEXIST BIT(30)#define COMP_IQK BIT(31)#define COMP_TX_REPORT BIT_ULL(32) +#define COMP_HALMAC BIT_ULL(33)/*-------------------------------------------------------------- Define the rt_print components
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 3/19 rtlwifi: add dmdef.h to share with driver and other modules
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
This header file is maintained by new module phydm, and share with driver and other modules, such as halmac. This patch adds only one enumeration, and more information will be added later.
--- drivers/net/wireless/realtek/rtlwifi/dmdef.h | 40 ++++++++++++++++++++++++++++ drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 + 2 files changed, 41 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/dmdef.h
drivers/net/wireless/realtek/rtlwifi/dmdef.h new file +40 -0
@@ -0,0 +1,40 @@ +/****************************************************************************** +* +* Copyright(c) 2007 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef __RTL_DMINFO_H__ +#define __RTL_DMINFO_H__ + +enum bb_path { +BB_PATH_A =0x00000001 , +BB_PATH_B =0x00000002 , +BB_PATH_C =0x00000004 , +BB_PATH_D =0x00000008 , + +BB_PATH_AB = (BB_PATH_A |BB_PATH_B ), +BB_PATH_AC = (BB_PATH_A |BB_PATH_C ), +BB_PATH_AD = (BB_PATH_A |BB_PATH_D ), +BB_PATH_BC = (BB_PATH_B |BB_PATH_C ), +BB_PATH_BD = (BB_PATH_B |BB_PATH_D ), +BB_PATH_CD = (BB_PATH_C |BB_PATH_D ), + +BB_PATH_ABC = (BB_PATH_A |BB_PATH_B |BB_PATH_C ), +BB_PATH_ABD = (BB_PATH_A |BB_PATH_B |BB_PATH_D ), +BB_PATH_ACD = (BB_PATH_A |BB_PATH_C |BB_PATH_D ), +BB_PATH_BCD = (BB_PATH_B |BB_PATH_C |BB_PATH_D ), + +BB_PATH_ABCD = (BB_PATH_A |BB_PATH_B |BB_PATH_C |BB_PATH_D ), +}; + +#endif
drivers/net/wireless/realtek/rtlwifi/wifi.h +1 -0
@@ -35,6 +35,7 @@#include <linux/usb.h> #include <net/mac80211.h> #include <linux/completion.h> +#include "dmdef.h" #include "debug.h" #define MASKBYTE0 0xff
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 4/19 rtlwifi: halmac: add main definition used by halmac
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
The files contain main definition of struct, enum, prototypes, state machine, etc.
--- .../realtek/rtlwifi/halmac/halmac_state_machine.h | 157 ++ .../wireless/realtek/rtlwifi/halmac/halmac_type.h | 2134 ++++++++++++++++++++ 2 files changed, 2291 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_state_machine.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_type.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_state_machine.h new file +157 -0
@@ -0,0 +1,157 @@ +/****************************************************************************** +* +* Copyright(c) 2017 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_STATE_MACHINE_H_ +#define _HALMAC_STATE_MACHINE_H_ + +enum halmac_dlfw_state { +HALMAC_DLFW_NONE =0 , +HALMAC_DLFW_DONE =1 , +HALMAC_GEN_INFO_SENT =2 , + +/* Data CPU firmware download framework */ +HALMAC_DLFW_INIT =0x11 , +HALMAC_DLFW_START =0x12 , +HALMAC_DLFW_CONF_READY =0x13 , +HALMAC_DLFW_CPU_READY =0x14 , +HALMAC_DLFW_MEM_READY =0x15 , +HALMAC_DLFW_SW_READY =0x16 , +HALMAC_DLFW_OFLD_READY =0x17 , + +HALMAC_DLFW_UNDEFINED =0x7F , +}; + +enum halmac_gpio_cfg_state { +HALMAC_GPIO_CFG_STATE_IDLE =0 , +HALMAC_GPIO_CFG_STATE_BUSY =1 , +HALMAC_GPIO_CFG_STATE_UNDEFINED =0x7F , +}; + +enum halmac_rsvd_pg_state { +HALMAC_RSVD_PG_STATE_IDLE =0 , +HALMAC_RSVD_PG_STATE_BUSY =1 , +HALMAC_RSVD_PG_STATE_UNDEFINED =0x7F , +}; + +enum halmac_api_state { +HALMAC_API_STATE_INIT =0 , +HALMAC_API_STATE_HALT =1 , +HALMAC_API_STATE_UNDEFINED =0x7F , +}; + +enum halmac_cmd_construct_state { +HALMAC_CMD_CNSTR_IDLE =0 , +HALMAC_CMD_CNSTR_BUSY =1 , +HALMAC_CMD_CNSTR_H2C_SENT =2 , +HALMAC_CMD_CNSTR_CNSTR =3 , +HALMAC_CMD_CNSTR_BUF_CLR =4 , +HALMAC_CMD_CNSTR_UNDEFINED =0x7F , +}; + +enum halmac_cmd_process_status { +HALMAC_CMD_PROCESS_IDLE =0x01 ,/* Init status */ +HALMAC_CMD_PROCESS_SENDING =0x02 ,/* Wait ack */ +HALMAC_CMD_PROCESS_RCVD =0x03 ,/* Rcvd ack */ +HALMAC_CMD_PROCESS_DONE =0x04 ,/* Event done */ +HALMAC_CMD_PROCESS_ERROR =0x05 ,/* Return code error */ +HALMAC_CMD_PROCESS_UNDEFINE =0x7F , +}; + +enum halmac_mac_power { +HALMAC_MAC_POWER_OFF =0x0 , +HALMAC_MAC_POWER_ON =0x1 , +HALMAC_MAC_POWER_UNDEFINE =0x7F , +}; + +enum halmac_wlcpu_mode { +HALMAC_WLCPU_ACTIVE =0x0 , +HALMAC_WLCPU_ENTER_SLEEP =0x1 , +HALMAC_WLCPU_SLEEP =0x2 , +HALMAC_WLCPU_UNDEFINE =0x7F , +}; + +struct halmac_efuse_state { +enum halmac_cmd_construct_state cmd_cnstr_state; +enum halmac_cmd_process_status proc_status; +u8 fw_rc; +u16 seq_num; +}; + +struct halmac_cfg_param_state { +enum halmac_cmd_construct_state cmd_cnstr_state; +enum halmac_cmd_process_status proc_status; +u8 fw_rc; +u16 seq_num; +}; + +struct halmac_scan_state { +enum halmac_cmd_construct_state cmd_cnstr_state; +enum halmac_cmd_process_status proc_status; +u8 fw_rc; +u16 seq_num; +}; + +struct halmac_update_pkt_state { +enum halmac_cmd_process_status proc_status; +u8 fw_rc; +u16 seq_num; +}; + +struct halmac_iqk_state { +enum halmac_cmd_process_status proc_status; +u8 fw_rc; +u16 seq_num; +}; + +struct halmac_pwr_tracking_state { +enum halmac_cmd_process_status proc_status; +u8 fw_rc; +u16 seq_num; +}; + +struct halmac_psd_state { +enum halmac_cmd_process_status proc_status; +u16 data_size; +u16 seg_size; +u8 *data; +u8 fw_rc; +u16 seq_num; +}; + +struct halmac_fw_snding_state { +enum halmac_cmd_construct_state cmd_cnstr_state; +enum halmac_cmd_process_status proc_status; +u8 fw_rc; +u16 seq_num; +}; + +struct halmac_state { +struct halmac_efuse_state efuse_state; +struct halmac_cfg_param_state cfg_param_state; +struct halmac_scan_state scan_state; +struct halmac_update_pkt_state update_pkt_state; +struct halmac_iqk_state iqk_state; +struct halmac_pwr_tracking_state pwr_trk_state; +struct halmac_psd_state psd_state; +struct halmac_fw_snding_state fw_snding_state; +enum halmac_api_state api_state; +enum halmac_mac_power mac_pwr; +enum halmac_dlfw_state dlfw_state; +enum halmac_wlcpu_mode wlcpu_mode; +enum halmac_gpio_cfg_state gpio_cfg_state; +enum halmac_rsvd_pg_state rsvd_pg_state; +}; + +#endif
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_type.h new file +2134 -0
2,134 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 5/19 rtlwifi: halmac: describe number and size of chip functions
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
The number and size of chip fucntions are different, such as TX/RX FIFO size, efuse size, etc. So they are defined in an individual file.
--- .../halmac_88xx/halmac_8822b/halmac_8822b_cfg.h | 68 ++++++++++++++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_88xx_cfg.h | 40 +++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_8822b_cfg.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_88xx_cfg.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_8822b_cfg.h new file +68 -0
@@ -0,0 +1,68 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_8822B_CFG_H_ +#define _HALMAC_8822B_CFG_H_ + +#include "../halmac_88xx_cfg.h" + +#define TX_FIFO_SIZE_8822B 262144 +#define RX_FIFO_SIZE_8822B 24576 +#define TRX_SHARE_SIZE_8822B 65536 + +#define RX_DESC_DUMMY_SIZE_8822B 72/* 8 * 9 Bytes */ +#define RX_FIFO_EXPANDING_MODE_PKT_SIZE_MAX_8822B 80/* 8 Byte alignment*/ + +/* should be 8 Byte alignment*/ +#if (HALMAC_RX_FIFO_EXPANDING_MODE_PKT_SIZE <= \ +RX_FIFO_EXPANDING_MODE_PKT_SIZE_MAX_8822B ) +#define RX_FIFO_EXPANDING_UNIT_8822B (RX_DESC_SIZE_88XX + \ + RX_DESC_DUMMY_SIZE_8822B + HALMAC_RX_FIFO_EXPANDING_MODE_PKT_SIZE) +#else +#define RX_FIFO_EXPANDING_UNIT_8822B (RX_DESC_SIZE_88XX + \ + RX_DESC_DUMMY_SIZE_8822B + RX_FIFO_EXPANDING_MODE_PKT_SIZE_MAX_8822B) +#endif + +#define TX_FIFO_SIZE_LA_8822B (TX_FIFO_SIZE_8822B >> 1) +#define TX_FIFO_SIZE_RX_EXPAND_1BLK_8822B \ + (TX_FIFO_SIZE_8822B - TRX_SHARE_SIZE_8822B) +#define RX_FIFO_SIZE_RX_EXPAND_1BLK_8822B \ + ((((RX_FIFO_EXPANDING_UNIT_8822B << 8) - 1) >> 10) << 10) +#define TX_FIFO_SIZE_RX_EXPAND_2BLK_8822B \ + (TX_FIFO_SIZE_8822B - (2 * TRX_SHARE_SIZE_8822B)) +#define RX_FIFO_SIZE_RX_EXPAND_2BLK_8822B \ + (RX_FIFO_SIZE_8822B + (2 * TRX_SHARE_SIZE_8822B)) +#define TX_FIFO_SIZE_RX_EXPAND_3BLK_8822B \ + (TX_FIFO_SIZE_8822B - (3 * TRX_SHARE_SIZE_8822B)) +#define RX_FIFO_SIZE_RX_EXPAND_3BLK_8822B \ + (RX_FIFO_SIZE_8822B + (3 * TRX_SHARE_SIZE_8822B)) + +#define EFUSE_SIZE_8822B 1024 +#define EEPROM_SIZE_8822B 768 +#define BT_EFUSE_SIZE_8822B 128 + +#define SEC_CAM_NUM_8822B 64 + +#define OQT_ENTRY_AC_8822B 32 +#define OQT_ENTRY_NOAC_8822B 32 +#define MACID_MAX_8822B 128 + +#define WLAN_FW_IRAM_MAX_SIZE_8822B 196608 +#define WLAN_FW_DRAM_MAX_SIZE_8822B 49152 +#define WLAN_FW_ERAM_MAX_SIZE_8822B 0 +#define WLAN_FW_MAX_SIZE_8822B (WLAN_FW_IRAM_MAX_SIZE_8822B + \ + WLAN_FW_DRAM_MAX_SIZE_8822B + WLAN_FW_ERAM_MAX_SIZE_8822B) + +#endif
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_88xx_cfg.h new file +40 -0
@@ -0,0 +1,40 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_88XX_CFG_H_ +#define _HALMAC_88XX_CFG_H_ + +#include "../halmac_api.h" + +#define TX_PAGE_SIZE_88XX 128 +#define TX_PAGE_SIZE_SHIFT_88XX 7/* 128 = 2^7 */ +#define TX_ALIGN_SIZE_88XX 8 +#define SDIO_TX_MAX_SIZE_88XX 31744 +#define RX_BUF_FW_88XX 12288 + +#define TX_DESC_SIZE_88XX 48 +#define RX_DESC_SIZE_88XX 24 + +#define H2C_PKT_SIZE_88XX 32/* Only support 32 byte packet now */ +#define H2C_PKT_HDR_SIZE_88XX 8 +#define C2H_DATA_OFFSET_88XX 10 +#define C2H_PKT_BUF_88XX 256 + +/* HW memory address */ +#define OCPBASE_TXBUF_88XX 0x18780000 +#define OCPBASE_DMEM_88XX 0x00200000 +#define OCPBASE_EMEM_88XX 0x00100000 + +#endif
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 6/19 rtlwifi: halmac: add register definitions
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
List all MAC registers including rtl8822b.
--- .../wireless/realtek/rtlwifi/halmac/halmac_reg2.h | 1292 ++++++++++++++++++++ .../realtek/rtlwifi/halmac/halmac_reg_8822b.h | 733 +++++++++++ 2 files changed, 2025 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_reg2.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_reg_8822b.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_reg2.h new file +1292 -0
@@ -0,0 +1,1292 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef __HALMAC_COM_REG_H__ +#define __HALMAC_COM_REG_H__ + +#define REG_SYS_ISO_CTRL 0x0000 + +#define REG_SDIO_TX_CTRL 0x10250000 + +#define REG_SYS_FUNC_EN 0x0002 +#define REG_SYS_PW_CTRL 0x0004 + +#define REG_SYS_CLK_CTRL 0x0008 + +#define REG_SYS_EEPROM_CTRL 0x000A +#define REG_EE_VPD 0x000C + +#define REG_SYS_SWR_CTRL1 0x0010 +#define REG_SYS_SWR_CTRL2 0x0014 + +#define REG_SDIO_HIMR 0x10250014 + +#define REG_SYS_SWR_CTRL3 0x0018 + +#define REG_SDIO_HISR 0x10250018 + +#define REG_RSV_CTRL 0x001C + +#define REG_SDIO_RX_REQ_LEN 0x1025001C + +#define REG_RF_CTRL 0x001F + +#define REG_SDIO_FREE_TXPG_SEQ_V1 0x1025001F + +#define REG_AFE_LDO_CTRL 0x0020 + +#define REG_SDIO_FREE_TXPG 0x10250020 + +#define REG_AFE_CTRL1 0x0024 + +#define REG_SDIO_FREE_TXPG2 0x10250024 + +#define REG_AFE_CTRL2 0x0028 + +#define REG_SDIO_OQT_FREE_TXPG_V1 0x10250028 + +#define REG_AFE_CTRL3 0x002C + +#define REG_EFUSE_CTRL 0x0030 + +#define REG_SDIO_HTSFR_INFO 0x10250030 + +#define REG_LDO_EFUSE_CTRL 0x0034 +#define REG_PWR_OPTION_CTRL 0x0038 + +#define REG_SDIO_HCPWM1_V2 0x10250038 +#define REG_SDIO_HCPWM2_V2 0x1025003A + +#define REG_CAL_TIMER 0x003C +#define REG_ACLK_MON 0x003E + +#define REG_GPIO_MUXCFG 0x0040 + +#define REG_SDIO_INDIRECT_REG_CFG 0x10250040 + +#define REG_GPIO_PIN_CTRL 0x0044 + +#define REG_SDIO_INDIRECT_REG_DATA 0x10250044 + +#define REG_GPIO_INTM 0x0048 +#define REG_LED_CFG 0x004C +#define REG_FSIMR 0x0050 +#define REG_FSISR 0x0054 +#define REG_HSIMR 0x0058 +#define REG_HSISR 0x005C +#define REG_GPIO_EXT_CTRL 0x0060 + +#define REG_SDIO_H2C 0x10250060 + +#define REG_PAD_CTRL1 0x0064 + +#define REG_SDIO_C2H 0x10250064 + +#define REG_WL_BT_PWR_CTRL 0x0068 + +#define REG_SDM_DEBUG 0x006C + +#define REG_SYS_SDIO_CTRL 0x0070 + +#define REG_HCI_OPT_CTRL 0x0074 + +#define REG_AFE_CTRL4 0x0078 + +#define REG_LDO_SWR_CTRL 0x007C + +#define REG_MCUFW_CTRL 0x0080 + +#define REG_SDIO_HRPWM1 0x10250080 +#define REG_SDIO_HRPWM2 0x10250082 + +#define REG_MCU_TST_CFG 0x0084 + +#define REG_SDIO_HPS_CLKR 0x10250084 +#define REG_SDIO_BUS_CTRL 0x10250085 + +#define REG_SDIO_HSUS_CTRL 0x10250086 + +#define REG_HMEBOX_E0_E1 0x0088 + +#define REG_SDIO_RESPONSE_TIMER 0x10250088 + +#define REG_SDIO_CMD_CRC 0x1025008A + +#define REG_HMEBOX_E2_E3 0x008C +#define REG_WLLPS_CTRL 0x0090 + +#define REG_SDIO_HSISR 0x10250090 + +#define REG_AFE_CTRL5 0x0094 + +#define REG_GPIO_DEBOUNCE_CTRL 0x0098 +#define REG_RPWM2 0x009C +#define REG_SYSON_FSM_MON 0x00A0 + +#define REG_AFE_CTRL6 0x00A4 + +#define REG_PMC_DBG_CTRL1 0x00A8 + +#define REG_AFE_CTRL7 0x00AC + +#define REG_HIMR0 0x00B0 +#define REG_HISR0 0x00B4 +#define REG_HIMR1 0x00B8 +#define REG_HISR1 0x00BC +#define REG_DBG_PORT_SEL 0x00C0 + +#define REG_SDIO_ERR_RPT 0x102500C0 + +#define REG_SDIO_CMD_ERRCNT 0x102500C2 +#define REG_SDIO_DATA_ERRCNT 0x102500C3 + +#define REG_PAD_CTRL2 0x00C4 + +#define REG_SDIO_CMD_ERR_CONTENT 0x102500C4 + +#define REG_SDIO_CRC_ERR_IDX 0x102500C9 + +#define REG_SDIO_DATA_CRC 0x102500CA + +#define REG_SDIO_DATA_REPLY_TIME 0x102500CB + +#define REG_PMC_DBG_CTRL2 0x00CC + +#define REG_BIST_CTRL 0x00D0 +#define REG_BIST_RPT 0x00D4 + +#define REG_MEM_CTRL 0x00D8 + +#define REG_AFE_CTRL8 0x00DC + +#define REG_USB_SIE_INTF 0x00E0 + +#define REG_PCIE_MIO_INTF 0x00E4 +#define REG_PCIE_MIO_INTD 0x00E8 + +#define REG_WLRF1 0x00EC + +#define REG_SYS_CFG1 0x00F0 +#define REG_SYS_STATUS1 0x00F4 +#define REG_SYS_STATUS2 0x00F8 +#define REG_SYS_CFG2 0x00FC +#define REG_CR 0x0100 + +#define REG_TSF_CLK_STATE 0x0108 +#define REG_TXDMA_PQ_MAP 0x010C + +#define REG_TRXFF_BNDY 0x0114 + +#define REG_PTA_I2C_MBOX 0x0118 + +#define REG_RXFF_BNDY 0x011C + +#define REG_FE1IMR 0x0120 + +#define REG_FE1ISR 0x0124 + +#define REG_CPWM 0x012C +#define REG_FWIMR 0x0130 +#define REG_FWISR 0x0134 +#define REG_FTIMR 0x0138 +#define REG_FTISR 0x013C +#define REG_PKTBUF_DBG_CTRL 0x0140 +#define REG_PKTBUF_DBG_DATA_L 0x0144 +#define REG_PKTBUF_DBG_DATA_H 0x0148 +#define REG_CPWM2 0x014C +#define REG_TC0_CTRL 0x0150 +#define REG_TC1_CTRL 0x0154 +#define REG_TC2_CTRL 0x0158 +#define REG_TC3_CTRL 0x015C +#define REG_TC4_CTRL 0x0160 +#define REG_TCUNIT_BASE 0x0164 +#define REG_TC5_CTRL 0x0168 +#define REG_TC6_CTRL 0x016C + +#define REG_MBIST_FAIL 0x0170 + +#define REG_MBIST_START_PAUSE 0x0174 +#define REG_MBIST_DONE 0x0178 + +#define REG_MBIST_FAIL_NRML 0x017C + +#define REG_AES_DECRPT_DATA 0x0180 +#define REG_AES_DECRPT_CFG 0x0184 + +#define REG_TMETER 0x0190 +#define REG_OSC_32K_CTRL 0x0194 + +#define REG_32K_CAL_REG1 0x0198 + +#define REG_C2HEVT 0x01A0 + +#define REG_C2HEVT_1 0x01A4 +#define REG_C2HEVT_2 0x01A8 +#define REG_C2HEVT_3 0x01AC + +#define REG_SW_DEFINED_PAGE1 0x01B8 + +#define REG_MCUTST_I 0x01C0 +#define REG_MCUTST_II 0x01C4 +#define REG_FMETHR 0x01C8 +#define REG_HMETFR 0x01CC +#define REG_HMEBOX0 0x01D0 +#define REG_HMEBOX1 0x01D4 +#define REG_HMEBOX2 0x01D8 +#define REG_HMEBOX3 0x01DC + +#define REG_LLT_INIT 0x01E0 + +#define REG_LLT_INIT_ADDR 0x01E4 + +#define REG_BB_ACCESS_CTRL 0x01E8 +#define REG_BB_ACCESS_DATA 0x01EC +#define REG_HMEBOX_E0 0x01F0 +#define REG_HMEBOX_E1 0x01F4 +#define REG_HMEBOX_E2 0x01F8 +#define REG_HMEBOX_E3 0x01FC + +#define REG_FIFOPAGE_CTRL_1 0x0200 + +#define REG_FIFOPAGE_CTRL_2 0x0204 + +#define REG_AUTO_LLT_V1 0x0208 + +#define REG_TXDMA_OFFSET_CHK 0x020C +#define REG_TXDMA_STATUS 0x0210 + +#define REG_TX_DMA_DBG 0x0214 + +#define REG_TQPNT1 0x0218 + +#define REG_TQPNT2 0x021C + +#define REG_TQPNT3 0x0220 + +#define REG_TQPNT4 0x0224 + +#define REG_RQPN_CTRL_1 0x0228 +#define REG_RQPN_CTRL_2 0x022C + +#define REG_FIFOPAGE_INFO_1 0x0230 + +#define REG_FIFOPAGE_INFO_2 0x0234 + +#define REG_FIFOPAGE_INFO_3 0x0238 + +#define REG_FIFOPAGE_INFO_4 0x023C + +#define REG_FIFOPAGE_INFO_5 0x0240 + +#define REG_H2C_HEAD 0x0244 +#define REG_H2C_TAIL 0x0248 +#define REG_H2C_READ_ADDR 0x024C +#define REG_H2C_WR_ADDR 0x0250 +#define REG_H2C_INFO 0x0254 + +#define REG_RXDMA_AGG_PG_TH 0x0280 + +#define REG_RXPKT_NUM 0x0284 + +#define REG_RXDMA_STATUS 0x0288 +#define REG_RXDMA_DPR 0x028C +#define REG_RXDMA_MODE 0x0290 +#define REG_C2H_PKT 0x0294 + +#define REG_FWFF_C2H 0x0298 +#define REG_FWFF_CTRL 0x029C +#define REG_FWFF_PKT_INFO 0x02A0 + +#define REG_PCIE_CTRL 0x0300 + +#define REG_INT_MIG 0x0304 + +#define REG_BCNQ_TXBD_DESA 0x0308 + +#define REG_MGQ_TXBD_DESA 0x0310 + +#define REG_VOQ_TXBD_DESA 0x0318 + +#define REG_VIQ_TXBD_DESA 0x0320 + +#define REG_BEQ_TXBD_DESA 0x0328 + +#define REG_BKQ_TXBD_DESA 0x0330 + +#define REG_RXQ_RXBD_DESA 0x0338 + +#define REG_HI0Q_TXBD_DESA 0x0340 + +#define REG_HI1Q_TXBD_DESA 0x0348 + +#define REG_HI2Q_TXBD_DESA 0x0350 + +#define REG_HI3Q_TXBD_DESA 0x0358 + +#define REG_HI4Q_TXBD_DESA 0x0360 +#define REG_HI5Q_TXBD_DESA 0x0368 + +#define REG_HI6Q_TXBD_DESA 0x0370 + +#define REG_HI7Q_TXBD_DESA 0x0378 + +#define REG_MGQ_TXBD_NUM 0x0380 + +#define REG_RX_RXBD_NUM 0x0382 +#define REG_VOQ_TXBD_NUM 0x0384 + +#define REG_VIQ_TXBD_NUM 0x0386 +#define REG_BEQ_TXBD_NUM 0x0388 + +#define REG_BKQ_TXBD_NUM 0x038A +#define REG_HI0Q_TXBD_NUM 0x038C + +#define REG_HI1Q_TXBD_NUM 0x038E +#define REG_HI2Q_TXBD_NUM 0x0390 + +#define REG_HI3Q_TXBD_NUM 0x0392 +#define REG_HI4Q_TXBD_NUM 0x0394 + +#define REG_HI5Q_TXBD_NUM 0x0396 +#define REG_HI6Q_TXBD_NUM 0x0398 + +#define REG_HI7Q_TXBD_NUM 0x039A + +#define REG_TSFTIMER_HCI 0x039C + +#define REG_BD_RWPTR_CLR 0x039C + +#define REG_VOQ_TXBD_IDX 0x03A0 + +#define REG_VIQ_TXBD_IDX 0x03A4 + +#define REG_BEQ_TXBD_IDX 0x03A8 + +#define REG_BKQ_TXBD_IDX 0x03AC + +#define REG_MGQ_TXBD_IDX 0x03B0 + +#define REG_RXQ_RXBD_IDX 0x03B4 + +#define REG_HI0Q_TXBD_IDX 0x03B8 + +#define REG_HI1Q_TXBD_IDX 0x03BC + +#define REG_HI2Q_TXBD_IDX 0x03C0 + +#define REG_HI3Q_TXBD_IDX 0x03C4 + +#define REG_HI4Q_TXBD_IDX 0x03C8 + +#define REG_HI5Q_TXBD_IDX 0x03CC + +#define REG_HI6Q_TXBD_IDX 0x03D0 + +#define REG_HI7Q_TXBD_IDX 0x03D4 + +#define REG_DBG_SEL_V1 0x03D8 + +#define REG_PCIE_HRPWM1_V1 0x03D9 + +#define REG_PCIE_HCPWM1_V1 0x03DA + +#define REG_PCIE_CTRL2 0x03DB + +#define REG_PCIE_HRPWM2_V1 0x03DC + +#define REG_PCIE_HCPWM2_V1 0x03DE + +#define REG_PCIE_H2C_MSG_V1 0x03E0 + +#define REG_PCIE_C2H_MSG_V1 0x03E4 + +#define REG_DBI_WDATA_V1 0x03E8 + +#define REG_DBI_RDATA_V1 0x03EC + +#define REG_DBI_FLAG_V1 0x03F0 + +#define REG_MDIO_V1 0x03F4 + +#define REG_PCIE_MIX_CFG 0x03F8 + +#define REG_HCI_MIX_CFG 0x03FC + +#define REG_Q0_INFO 0x0400 + +#define REG_Q1_INFO 0x0404 + +#define REG_Q2_INFO 0x0408 + +#define REG_Q3_INFO 0x040C + +#define REG_MGQ_INFO 0x0410 + +#define REG_HIQ_INFO 0x0414 + +#define REG_BCNQ_INFO 0x0418 + +#define REG_TXPKT_EMPTY 0x041A + +#define REG_CPU_MGQ_INFO 0x041C +#define REG_FWHW_TXQ_CTRL 0x0420 + +#define REG_DATAFB_SEL 0x0423 + +#define REG_BCNQ_BDNY_V1 0x0424 + +#define REG_LIFETIME_EN 0x0426 + +#define REG_SPEC_SIFS 0x0428 +#define REG_RETRY_LIMIT 0x042A +#define REG_TXBF_CTRL 0x042C +#define REG_DARFRC 0x0430 + +#define REG_RARFRC 0x0438 + +#define REG_RRSR 0x0440 +#define REG_ARFR0 0x0444 + +#define REG_ARFR1_V1 0x044C + +#define REG_CCK_CHECK 0x0454 + +#define REG_AMPDU_MAX_TIME_V1 0x0455 + +#define REG_BCNQ1_BDNY_V1 0x0456 + +#define REG_AMPDU_MAX_LENGTH 0x0458 + +#define REG_ACQ_STOP 0x045C + +#define REG_NDPA_RATE 0x045D + +#define REG_TX_HANG_CTRL 0x045E +#define REG_NDPA_OPT_CTRL 0x045F + +#define REG_RD_RESP_PKT_TH 0x0463 + +#define REG_CMDQ_INFO 0x0464 + +#define REG_Q4_INFO 0x0468 + +#define REG_Q5_INFO 0x046C +#define REG_Q6_INFO 0x0470 +#define REG_Q7_INFO 0x0474 + +#define REG_WMAC_LBK_BUF_HD_V1 0x0478 +#define REG_MGQ_BDNY_V1 0x047A + +#define REG_TXRPT_CTRL 0x047C +#define REG_INIRTS_RATE_SEL 0x0480 +#define REG_BASIC_CFEND_RATE 0x0481 +#define REG_STBC_CFEND_RATE 0x0482 +#define REG_DATA_SC 0x0483 + +#define REG_MACID_SLEEP3 0x0484 + +#define REG_MACID_SLEEP1 0x0488 + +#define REG_ARFR2_V1 0x048C + +#define REG_ARFR3_V1 0x0494 + +#define REG_ARFR4 0x049C + +#define REG_ARFR5 0x04A4 + +#define REG_TXRPT_START_OFFSET 0x04AC + +#define REG_POWER_STAGE1 0x04B4 + +#define REG_POWER_STAGE2 0x04B8 + +#define REG_SW_AMPDU_BURST_MODE_CTRL 0x04BC +#define REG_PKT_LIFE_TIME 0x04C0 +#define REG_STBC_SETTING 0x04C4 +#define REG_STBC_SETTING2 0x04C5 +#define REG_QUEUE_CTRL 0x04C6 +#define REG_SINGLE_AMPDU_CTRL 0x04C7 +#define REG_PROT_MODE_CTRL 0x04C8 +#define REG_BAR_MODE_CTRL 0x04CC +#define REG_RA_TRY_RATE_AGG_LMT 0x04CF + +#define REG_MACID_SLEEP2 0x04D0 + +#define REG_MACID_SLEEP 0x04D4 + +#define REG_HW_SEQ0 0x04D8 +#define REG_HW_SEQ1 0x04DA +#define REG_HW_SEQ2 0x04DC +#define REG_HW_SEQ3 0x04DE + +#define REG_NULL_PKT_STATUS_V1 0x04E0 + +#define REG_PTCL_ERR_STATUS 0x04E2 + +#define REG_NULL_PKT_STATUS_EXTEND 0x04E3 + +#define REG_VIDEO_ENHANCEMENT_FUN 0x04E4 + +#define REG_BT_POLLUTE_PKT_CNT 0x04E8 + +#define REG_PTCL_DBG 0x04EC + +#define REG_CPUMGQ_TIMER_CTRL2 0x04F4 + +#define REG_DUMMY_PAGE4_V1 0x04FC + +#define REG_MOREDATA 0x04FE + +#define REG_EDCA_VO_PARAM 0x0500 +#define REG_EDCA_VI_PARAM 0x0504 +#define REG_EDCA_BE_PARAM 0x0508 +#define REG_EDCA_BK_PARAM 0x050C +#define REG_BCNTCFG 0x0510 +#define REG_PIFS 0x0512 +#define REG_RDG_PIFS 0x0513 +#define REG_SIFS 0x0514 + +#define REG_TSFTR_SYN_OFFSET 0x0518 + +#define REG_AGGR_BREAK_TIME 0x051A +#define REG_SLOT 0x051B + +#define REG_TX_PTCL_CTRL 0x0520 +#define REG_TXPAUSE 0x0522 +#define REG_DIS_TXREQ_CLR 0x0523 +#define REG_RD_CTRL 0x0524 + +#define REG_MBSSID_CTRL 0x0526 +#define REG_P2PPS_CTRL 0x0527 + +#define REG_PKT_LIFETIME_CTRL 0x0528 + +#define REG_P2PPS_SPEC_STATE 0x052B + +#define REG_TXOP_LIMIT_CTRL 0x052C + +#define REG_BAR_TX_CTRL 0x0530 + +#define REG_P2PON_DIS_TXTIME 0x0531 + +#define REG_QUEUE_INCOL_THR 0x0538 + +#define REG_QUEUE_INCOL_EN 0x053C + +#define REG_TBTT_PROHIBIT 0x0540 +#define REG_P2PPS_STATE 0x0543 + +#define REG_RD_NAV_NXT 0x0544 +#define REG_NAV_PROT_LEN 0x0546 + +#define REG_BCN_CTRL 0x0550 + +#define REG_BCN_CTRL_CLINT0 0x0551 + +#define REG_MBID_NUM 0x0552 +#define REG_DUAL_TSF_RST 0x0553 +#define REG_MBSSID_BCN_SPACE 0x0554 +#define REG_DRVERLYINT 0x0558 +#define REG_BCNDMATIM 0x0559 +#define REG_ATIMWND 0x055A +#define REG_USTIME_TSF 0x055C +#define REG_BCN_MAX_ERR 0x055D +#define REG_RXTSF_OFFSET_CCK 0x055E +#define REG_RXTSF_OFFSET_OFDM 0x055F + +#define REG_TSFTR 0x0560 + +#define REG_FREERUN_CNT 0x0568 + +#define REG_ATIMWND1_V1 0x0570 + +#define REG_TBTT_PROHIBIT_INFRA 0x0571 + +#define REG_CTWND 0x0572 +#define REG_BCNIVLCUNT 0x0573 +#define REG_BCNDROPCTRL 0x0574 + +#define REG_HGQ_TIMEOUT_PERIOD 0x0575 + +#define REG_TXCMD_TIMEOUT_PERIOD 0x0576 +#define REG_MISC_CTRL 0x0577 + +#define REG_BCN_CTRL_CLINT1 0x0578 +#define REG_BCN_CTRL_CLINT2 0x0579 +#define REG_BCN_CTRL_CLINT3 0x057A + +#define REG_EXTEND_CTRL 0x057B + +#define REG_P2PPS1_SPEC_STATE 0x057C +#define REG_P2PPS1_STATE 0x057D +#define REG_P2PPS2_SPEC_STATE 0x057E +#define REG_P2PPS2_STATE 0x057F + +#define REG_PS_TIMER0 0x0580 + +#define REG_PS_TIMER1 0x0584 + +#define REG_PS_TIMER2 0x0588 + +#define REG_TBTT_CTN_AREA 0x058C +#define REG_FORCE_BCN_IFS 0x058E + +#define REG_TXOP_MIN 0x0590 +#define REG_PRE_BKF_TIME 0x0592 +#define REG_CROSS_TXOP_CTRL 0x0593 + +#define REG_ATIMWND2 0x05A0 + +#define REG_ATIMWND3 0x05A1 + +#define REG_ATIMWND4 0x05A2 + +#define REG_ATIMWND5 0x05A3 + +#define REG_ATIMWND6 0x05A4 + +#define REG_ATIMWND7 0x05A5 + +#define REG_ATIMUGT 0x05A6 + +#define REG_HIQ_NO_LMT_EN 0x05A7 + +#define REG_DTIM_COUNTER_ROOT 0x05A8 + +#define REG_DTIM_COUNTER_VAP1 0x05A9 +#define REG_DTIM_COUNTER_VAP2 0x05AA +#define REG_DTIM_COUNTER_VAP3 0x05AB +#define REG_DTIM_COUNTER_VAP4 0x05AC + +#define REG_DTIM_COUNTER_VAP5 0x05AD +#define REG_DTIM_COUNTER_VAP6 0x05AE +#define REG_DTIM_COUNTER_VAP7 0x05AF +#define REG_DIS_ATIM 0x05B0 + +#define REG_EARLY_128US 0x05B1 + +#define REG_P2PPS1_CTRL 0x05B2 + +#define REG_P2PPS2_CTRL 0x05B3 + +#define REG_TIMER0_SRC_SEL 0x05B4 +#define REG_NOA_UNIT_SEL 0x05B5 + +#define REG_P2POFF_DIS_TXTIME 0x05B7 + +#define REG_MBSSID_BCN_SPACE2 0x05B8 +#define REG_MBSSID_BCN_SPACE3 0x05BC + +#define REG_ACMHWCTRL 0x05C0 +#define REG_ACMRSTCTRL 0x05C1 +#define REG_ACMAVG 0x05C2 +#define REG_VO_ADMTIME 0x05C4 +#define REG_VI_ADMTIME 0x05C6 +#define REG_BE_ADMTIME 0x05C8 + +#define REG_EDCA_RANDOM_GEN 0x05CC + +#define REG_TXCMD_NOA_SEL 0x05CF + +#define REG_NOA_PARAM 0x05E0 + +#define REG_P2P_RST 0x05F0 + +#define REG_SCHEDULER_RST 0x05F1 + +#define REG_SCH_TXCMD 0x05F8 +#define REG_PAGE5_DUMMY 0x05FC +#define REG_WMAC_CR 0x0600 + +#define REG_WMAC_FWPKT_CR 0x0601 + +#define REG_BWOPMODE 0x0603 + +#define REG_TCR 0x0604 +#define REG_RCR 0x0608 + +#define REG_RX_PKT_LIMIT 0x060C + +#define REG_RX_DLK_TIME 0x060D + +#define REG_RX_DRVINFO_SZ 0x060F +#define REG_MACID 0x0610 + +#define REG_BSSID 0x0618 + +#define REG_MAR 0x0620 + +#define REG_MBIDCAMCFG_1 0x0628 + +#define REG_MBIDCAMCFG_2 0x062C + +#define REG_WMAC_TCR_TSFT_OFS 0x0630 +#define REG_UDF_THSD 0x0632 +#define REG_ZLD_NUM 0x0633 + +#define REG_STMP_THSD 0x0634 +#define REG_WMAC_TXTIMEOUT 0x0635 + +#define REG_MCU_TEST_2_V1 0x0636 + +#define REG_USTIME_EDCA 0x0638 + +#define REG_MAC_SPEC_SIFS 0x063A +#define REG_RESP_SIFS_CCK 0x063C +#define REG_RESP_SIFS_OFDM 0x063E +#define REG_ACKTO 0x0640 +#define REG_CTS2TO 0x0641 +#define REG_EIFS 0x0642 + +#define REG_NAV_CTRL 0x0650 +#define REG_BACAMCMD 0x0654 + +#define REG_BACAMCONTENT 0x0658 + +#define REG_LBDLY 0x0660 + +#define REG_WMAC_BACAM_RPMEN 0x0661 + +#define REG_TX_RX 0x0662 + +#define REG_WMAC_BITMAP_CTL 0x0663 + +#define REG_RXERR_RPT 0x0664 +#define REG_WMAC_TRXPTCL_CTL 0x0668 + +#define REG_CAMCMD 0x0670 +#define REG_CAMWRITE 0x0674 +#define REG_CAMREAD 0x0678 +#define REG_CAMDBG 0x067C +#define REG_SECCFG 0x0680 + +#define REG_RXFILTER_CATEGORY_1 0x0682 +#define REG_RXFILTER_ACTION_1 0x0683 +#define REG_RXFILTER_CATEGORY_2 0x0684 +#define REG_RXFILTER_ACTION_2 0x0685 +#define REG_RXFILTER_CATEGORY_3 0x0686 +#define REG_RXFILTER_ACTION_3 0x0687 +#define REG_RXFLTMAP3 0x0688 +#define REG_RXFLTMAP4 0x068A +#define REG_RXFLTMAP5 0x068C +#define REG_RXFLTMAP6 0x068E + +#define REG_WOW_CTRL 0x0690 + +#define REG_NAN_RX_TSF_FILTER 0x0691 + +#define REG_PS_RX_INFO 0x0692 +#define REG_WMMPS_UAPSD_TID 0x0693 +#define REG_LPNAV_CTRL 0x0694 + +#define REG_WKFMCAM_CMD 0x0698 + +#define REG_WKFMCAM_RWD 0x069C + +#define REG_RXFLTMAP0 0x06A0 + +#define REG_RXFLTMAP1 0x06A2 + +#define REG_RXFLTMAP2 0x06A4 + +#define REG_BCN_PSR_RPT 0x06A8 + +#define REG_FLC_RPC 0x06AC +#define REG_FLC_RPCT 0x06AD +#define REG_FLC_PTS 0x06AE +#define REG_FLC_TRPC 0x06AF + +#define REG_RXPKTMON_CTRL 0x06B0 + +#define REG_STATE_MON 0x06B4 + +#define REG_ERROR_MON 0x06B8 + +#define REG_SEARCH_MACID 0x06BC + +#define REG_BT_COEX_TABLE 0x06C0 + +#define REG_RXCMD_0 0x06D0 +#define REG_RXCMD_1 0x06D4 + +#define REG_WMAC_RESP_TXINFO 0x06D8 + +#define REG_BBPSF_CTRL 0x06DC + +#define REG_P2P_RX_BCN_NOA 0x06E0 +#define REG_ASSOCIATED_BFMER0_INFO 0x06E4 + +#define REG_ASSOCIATED_BFMER1_INFO 0x06EC + +#define REG_TX_CSI_RPT_PARAM_BW20 0x06F4 + +#define REG_TX_CSI_RPT_PARAM_BW40 0x06F8 + +#define REG_TX_CSI_RPT_PARAM_BW80 0x06FC + +#define REG_MACID1 0x0700 + +#define REG_BSSID1 0x0708 + +#define REG_BCN_PSR_RPT1 0x0710 + +#define REG_ASSOCIATED_BFMEE_SEL 0x0714 + +#define REG_SND_PTCL_CTRL 0x0718 + +#define REG_RX_CSI_RPT_INFO 0x071C + +#define REG_NS_ARP_CTRL 0x0720 +#define REG_NS_ARP_INFO 0x0724 + +#define REG_BEAMFORMING_INFO_NSARP_V1 0x0728 + +#define REG_BEAMFORMING_INFO_NSARP 0x072C + +#define REG_WMAC_RTX_CTX_SUBTYPE_CFG 0x0750 + +#define REG_WMAC_SWAES_CFG 0x0760 + +#define REG_BT_COEX_V2 0x0762 + +#define REG_BT_COEX 0x0764 + +#define REG_WLAN_ACT_MASK_CTRL 0x0768 + +#define REG_BT_COEX_ENHANCED_INTR_CTRL 0x076E + +#define REG_BT_ACT_STATISTICS 0x0770 + +#define REG_BT_STATISTICS_CONTROL_REGISTER 0x0778 + +#define REG_BT_STATUS_REPORT_REGISTER 0x077C + +#define REG_BT_INTERRUPT_CONTROL_REGISTER 0x0780 + +#define REG_WLAN_REPORT_TIME_OUT_CONTROL_REGISTER 0x0784 + +#define REG_BT_ISOLATION_TABLE_REGISTER_REGISTER 0x0785 + +#define REG_BT_INTERRUPT_STATUS_REGISTER 0x078F + +#define REG_BT_TDMA_TIME_REGISTER 0x0790 + +#define REG_BT_ACT_REGISTER 0x0794 + +#define REG_OBFF_CTRL_BASIC 0x0798 + +#define REG_OBFF_CTRL2_TIMER 0x079C + +#define REG_LTR_CTRL_BASIC 0x07A0 + +#define REG_LTR_CTRL2_TIMER_THRESHOLD 0x07A4 + +#define REG_LTR_IDLE_LATENCY_V1 0x07A8 +#define REG_LTR_ACTIVE_LATENCY_V1 0x07AC + +#define REG_ANTENNA_TRAINING_CONTROL_REGISTER 0x07B0 + +#define REG_WMAC_PKTCNT_RWD 0x07B8 + +#define REG_WMAC_PKTCNT_CTRL 0x07BC + +#define REG_IQ_DUMP 0x07C0 + +#define REG_WMAC_FTM_CTL 0x07CC + +#define REG_WMAC_IQ_MDPK_FUNC 0x07CE + +#define REG_WMAC_OPTION_FUNCTION 0x07D0 + +#define REG_RX_FILTER_FUNCTION 0x07DA + +#define REG_NDP_SIG 0x07E0 + +#define REG_TXCMD_INFO_FOR_RSP_PKT 0x07E4 + +#define REG_RTS_ADDRESS_0 0x07F0 + +#define REG_RTS_ADDRESS_1 0x07F8 + +#define REG__RPFM_MAP1 0x07FE + +#define REG_SYS_CFG3 0x1000 + +#define REG_SYS_CFG4 0x1034 + +#define REG_SYS_CFG5 0x1070 + +#define REG_CPU_DMEM_CON 0x1080 + +#define REG_BOOT_REASON 0x1088 + +#define REG_NFCPAD_CTRL 0x10A8 + +#define REG_HIMR2 0x10B0 +#define REG_HISR2 0x10B4 +#define REG_HIMR3 0x10B8 +#define REG_HISR3 0x10BC +#define REG_SW_MDIO 0x10C0 + +#define REG_SW_FLUSH 0x10C4 + +#define REG_H2C_PKT_READADDR 0x10D0 + +#define REG_H2C_PKT_WRITEADDR 0x10D4 + +#define REG_MEM_PWR_CRTL 0x10D8 + +#define REG_FW_DBG0 0x10E0 +#define REG_FW_DBG1 0x10E4 + +#define REG_FW_DBG2 0x10E8 +#define REG_FW_DBG3 0x10EC +#define REG_FW_DBG4 0x10F0 +#define REG_FW_DBG5 0x10F4 + +#define REG_FW_DBG6 0x10F8 +#define REG_FW_DBG7 0x10FC + +#define REG_CR_EXT 0x1100 + +#define REG_FWFF 0x1114 + +#define REG_RXFF_PTR_V1 0x1118 +#define REG_RXFF_WTR_V1 0x111C + +#define REG_FE2IMR 0x1120 +#define REG_FE2ISR 0x1124 +#define REG_FE3IMR 0x1128 +#define REG_FE3ISR 0x112C +#define REG_FE4IMR 0x1130 +#define REG_FE4ISR 0x1134 +#define REG_FT1IMR 0x1138 +#define REG_FT1ISR 0x113C +#define REG_SPWR0 0x1140 +#define REG_SPWR1 0x1144 +#define REG_SPWR2 0x1148 +#define REG_SPWR3 0x114C +#define REG_POWSEQ 0x1150 + +#define REG_TC7_CTRL_V1 0x1158 +#define REG_TC8_CTRL_V1 0x115C + +#define REG_FT2IMR 0x11E0 +#define REG_FT2ISR 0x11E4 + +#define REG_MSG2 0x11F0 +#define REG_MSG3 0x11F4 +#define REG_MSG4 0x11F8 +#define REG_MSG5 0x11FC +#define REG_DDMA_CH0SA 0x1200 +#define REG_DDMA_CH0DA 0x1204 +#define REG_DDMA_CH0CTRL 0x1208 +#define REG_DDMA_CH1SA 0x1210 +#define REG_DDMA_CH1DA 0x1214 +#define REG_DDMA_CH1CTRL 0x1218 +#define REG_DDMA_CH2SA 0x1220 +#define REG_DDMA_CH2DA 0x1224 +#define REG_DDMA_CH2CTRL 0x1228 +#define REG_DDMA_CH3SA 0x1230 +#define REG_DDMA_CH3DA 0x1234 +#define REG_DDMA_CH3CTRL 0x1238 +#define REG_DDMA_CH4SA 0x1240 +#define REG_DDMA_CH4DA 0x1244 +#define REG_DDMA_CH4CTRL 0x1248 +#define REG_DDMA_CH5SA 0x1250 +#define REG_DDMA_CH5DA 0x1254 + +#define REG_REG_DDMA_CH5CTRL 0x1258 + +#define REG_DDMA_INT_MSK 0x12E0 +#define REG_DDMA_CHSTATUS 0x12E8 +#define REG_DDMA_CHKSUM 0x12F0 +#define REG_DDMA_MONITOR 0x12FC + +#define REG_STC_INT_CS 0x1300 +#define REG_ST_INT_CFG 0x1304 + +#define REG_CMU_DLY_CTRL 0x1310 +#define REG_CMU_DLY_CFG 0x1314 + +#define REG_H2CQ_TXBD_DESA 0x1320 + +#define REG_H2CQ_TXBD_NUM 0x1328 + +#define REG_H2CQ_TXBD_IDX 0x132C + +#define REG_H2CQ_CSR 0x1330 + +#define REG_CHANGE_PCIE_SPEED 0x1350 + +#define REG_OLD_DEHANG 0x13F4 + +#define REG_Q0_Q1_INFO 0x1400 + +#define REG_Q2_Q3_INFO 0x1404 +#define REG_Q4_Q5_INFO 0x1408 + +#define REG_Q6_Q7_INFO 0x140C +#define REG_MGQ_HIQ_INFO 0x1410 + +#define REG_CMDQ_BCNQ_INFO 0x1414 + +#define REG_USEREG_SETTING 0x1420 + +#define REG_AESIV_SETTING 0x1424 + +#define REG_BF0_TIME_SETTING 0x1428 +#define REG_BF1_TIME_SETTING 0x142C +#define REG_BF_TIMEOUT_EN 0x1430 + +#define REG_MACID_RELEASE0 0x1434 + +#define REG_MACID_RELEASE1 0x1438 + +#define REG_MACID_RELEASE2 0x143C + +#define REG_MACID_RELEASE3 0x1440 +#define REG_MACID_RELEASE_SETTING 0x1444 + +#define REG_FAST_EDCA_VOVI_SETTING 0x1448 +#define REG_FAST_EDCA_BEBK_SETTING 0x144C + +#define REG_MACID_DROP0 0x1450 + +#define REG_MACID_DROP1 0x1454 + +#define REG_MACID_DROP2 0x1458 +#define REG_MACID_DROP3 0x145C + +#define REG_R_MACID_RELEASE_SUCCESS_0 0x1460 +#define REG_R_MACID_RELEASE_SUCCESS_1 0x1464 +#define REG_R_MACID_RELEASE_SUCCESS_2 0x1468 +#define REG_R_MACID_RELEASE_SUCCESS_3 0x146C + +#define REG_MGG_FIFO_CRTL 0x1470 + +#define REG_MGG_FIFO_INT 0x1474 + +#define REG_MGG_FIFO_LIFETIME 0x1478 + +#define REG_R_MACID_RELEASE_SUCCESS_CLEAR_OFFSET 0x147C + +#define REG_SHCUT_SETTING 0x1480 + +#define REG_SHCUT_LLC_ETH_TYPE0 0x1484 +#define REG_SHCUT_LLC_ETH_TYPE1 0x1488 +#define REG_SHCUT_LLC_OUI0 0x148C +#define REG_SHCUT_LLC_OUI1 0x1490 +#define REG_SHCUT_LLC_OUI2 0x1494 + +#define REG_SHCUT_LLC_OUI3 0x1498 + +#define REG_MU_TX_CTL 0x14C0 + +#define REG_MU_STA_GID_VLD 0x14C4 +#define REG_MU_STA_USER_POS_INFO 0x14C8 + +#define REG_MU_TRX_DBG_CNT 0x14D0 + +#define REG_CPUMGQ_TX_TIMER 0x1500 + +#define REG_PS_TIMER_A 0x1504 + +#define REG_PS_TIMER_B 0x1508 + +#define REG_PS_TIMER_C 0x150C + +#define REG_PS_TIMER_ABC_CPUMGQ_TIMER_CRTL 0x1510 + +#define REG_CPUMGQ_TX_TIMER_EARLY 0x1514 +#define REG_PS_TIMER_A_EARLY 0x1515 +#define REG_PS_TIMER_B_EARLY 0x1516 +#define REG_PS_TIMER_C_EARLY 0x1517 + +#define REG_CPUMGQ_PARAMETER 0x1518 + +#define REG_BCN_PSR_RPT2 0x1600 +#define REG_BCN_PSR_RPT3 0x1604 +#define REG_BCN_PSR_RPT4 0x1608 +#define REG_A1_ADDR_MASK 0x160C + +#define REG_MACID2 0x1620 + +#define REG_BSSID2 0x1628 + +#define REG_MACID3 0x1630 + +#define REG_BSSID3 0x1638 + +#define REG_MACID4 0x1640 + +#define REG_BSSID4 0x1648 + +#define REG_NOA_REPORT 0x1650 + +#define REG_PWRBIT_SETTING 0x1660 + +#define REG_WMAC_MU_BF_OPTION 0x167C + +#define REG_WMAC_MU_ARB 0x167E + +#define REG_WMAC_MU_OPTION 0x167F +#define REG_WMAC_MU_BF_CTL 0x1680 +#define REG_WMAC_MU_BFRPT_PARA 0x1682 +#define REG_WMAC_ASSOCIATED_MU_BFMEE2 0x1684 +#define REG_WMAC_ASSOCIATED_MU_BFMEE3 0x1686 +#define REG_WMAC_ASSOCIATED_MU_BFMEE4 0x1688 +#define REG_WMAC_ASSOCIATED_MU_BFMEE5 0x168A +#define REG_WMAC_ASSOCIATED_MU_BFMEE6 0x168C +#define REG_WMAC_ASSOCIATED_MU_BFMEE7 0x168E + +#define REG_TRANSMIT_ADDRSS_0 0x16A0 + +#define REG_TRANSMIT_ADDRSS_1 0x16A8 + +#define REG_TRANSMIT_ADDRSS_2 0x16B0 + +#define REG_TRANSMIT_ADDRSS_3 0x16B8 + +#define REG_TRANSMIT_ADDRSS_4 0x16C0 + +#define REG_WL2LTECOEX_INDIRECT_ACCESS_CTRL_V1 0x1700 +#define REG_WL2LTECOEX_INDIRECT_ACCESS_WRITE_DATA_V1 0x1704 +#define REG_WL2LTECOEX_INDIRECT_ACCESS_READ_DATA_V1 0x1708 + +/* ----------------------------------------------------- */ +/* */ +/* 0xFB00h ~ 0xFCFFh TX/RX packet buffer affress */ +/* */ +/* ----------------------------------------------------- */ +#define REG_RXPKTBUF_STARTADDR 0xFB00 +#define REG_TXPKTBUF_STARTADDR 0xFC00 + +/* ----------------------------------------------------- */ +/* */ +/* 0xFD00h ~ 0xFDFFh 8051 CPU Local REG */ +/* */ +/* ----------------------------------------------------- */ +#define REG_SYS_CTRL 0xFD00 +#define REG_PONSTS_RPT1 0xFD01 +#define REG_PONSTS_RPT2 0xFD02 +#define REG_PONSTS_RPT3 0xFD03 +#define REG_PONSTS_RPT4 0xFD04/* 0x84 */ +#define REG_PONSTS_RPT5 0xFD05/* 0x85 */ +#define REG_8051ERRFLAG 0xFD08 +#define REG_8051ERRFLAG_MASK 0xFD09 +#define REG_TXADDRH 0xFD10/* Tx Packet High Address */ +#define REG_RXADDRH 0xFD11/* Rx Packet High Address */ +#define REG_TXADDRH_EXT 0xFD12 + +#define REG_U3_STATE 0xFD48 + +/* for MAILBOX */ +#define REG_OUTDATA0 0xFD50 +#define REG_OUTDATA1 0xFD54 +#define REG_OUTRDY 0xFD58/* bit[0] : OutReady, bit[1] : OutEmptyIntEn */ + +#define REG_INDATA0 0xFD60 +#define REG_INDATA1 0xFD64 +#define REG_INRDY 0xFD68/* bit[0] : InReady, bit[1] : InRdyIntEn */ + +/* MCU ERROR debug REG */ +#define REG_MCUERR_PCLSB 0xFD90/* PC[7:0] */ +#define REG_MCUERR_PCMSB 0xFD91/* PC[15:8] */ +#define REG_MCUERR_ACC 0xFD92 +#define REG_MCUERR_B 0xFD93 +#define REG_MCUERR_DPTRLSB 0xFD94/* DPTR[7:0] */ +#define REG_MCUERR_DPTRMSB 0xFD95/* DPTR[15:8] */ +#define REG_MCUERR_SP 0xFD96/* SP[7:0] */ +#define REG_MCUERR_IE 0xFD97/* IE[7:0] */ +#define REG_MCUERR_EIE 0xFD98/* EIE[7:0] */ +#define REG_VERA_SIM 0xFD9F +/* 0xFD99~0xFD9F are reserved.. */ + +/* ----------------------------------------------------- */ +/* */ +/* 0xFE00h ~ 0xFEFFh USB Configuration */ +/* */ +/* ----------------------------------------------------- */ + +/* RTS5101 USB Register Definition */ +#define REG_USB_SETUP_DEC_INT 0xFE00 +#define REG_USB_DMACTL 0xFE01 +#define REG_USB_IRQSTAT0 0xFE02 +#define REG_USB_IRQSTAT1 0xFE03 +#define REG_USB_IRQEN0 0xFE04 +#define REG_USB_IRQEN1 0xFE05 +#define REG_USB_AUTOPTRL 0xFE06 +#define REG_USB_AUTOPTRH 0xFE07 +#define REG_USB_AUTODAT 0xFE08 + +#define REG_USB_SCRATCH0 0xFE09 +#define REG_USB_SCRATCH1 0xFE0A +#define REG_USB_SEEPROM 0xFE0B +#define REG_USB_GPIO0 0xFE0C +#define REG_USB_GPIO0DIR 0xFE0D +#define REG_USB_CLKSEL 0xFE0E +#define REG_USB_BOOTCTL 0xFE0F + +#define REG_USB_USBCTL 0xFE10 +#define REG_USB_USBSTAT 0xFE11 +#define REG_USB_DEVADDR 0xFE12 +#define REG_USB_USBTEST 0xFE13 +#define REG_USB_FNUM0 0xFE14 +#define REG_USB_FNUM1 0xFE15 + +#define REG_USB_EP_IDX 0xFE20 +#define REG_USB_EP_CFG 0xFE21 +#define REG_USB_EP_CTL 0xFE22 +#define REG_USB_EP_STAT 0xFE23 +#define REG_USB_EP_IRQ 0xFE24 +#define REG_USB_EP_IRQEN 0xFE25 +#define REG_USB_EP_MAXPKT0 0xFE26 +#define REG_USB_EP_MAXPKT1 0xFE27 +#define REG_USB_EP_DAT 0xFE28 +#define REG_USB_EP_BC0 0xFE29 +#define REG_USB_EP_BC1 0xFE2A +#define REG_USB_EP_TC0 0xFE2B +#define REG_USB_EP_TC1 0xFE2C +#define REG_USB_EP_TC2 0xFE2D +#define REG_USB_EP_CTL2 0xFE2E + +#define REG_USB_INFO 0xFE17 +#define REG_USB_SPECIAL_OPTION 0xFE55 +#define REG_USB_DMA_AGG_TO 0xFE5B +#define REG_USB_AGG_TO 0xFE5C +#define REG_USB_AGG_TH 0xFE5D + +#define REG_USB_VID 0xFE60 +#define REG_USB_PID 0xFE62 +#define REG_USB_OPT 0xFE64 +#define REG_USB_CONFIG 0xFE65 + +#define REG_USB_PHY_PARA1 0xFE68 +#define REG_USB_PHY_PARA2 0xFE69 +#define REG_USB_PHY_PARA3 0xFE6A +#define REG_USB_PHY_PARA4 0xFE6B +#define REG_USB_OPT2 0xFE6C +#define REG_USB_MAC_ADDR 0xFE70 +#define REG_USB_MANUFACTURE_SETTING 0xFE80 +#define REG_USB_PRODUCT_STRING 0xFEA0 +#define REG_USB_SERIAL_NUMBER_STRING 0xFED0 + +#define REG_USB_ALTERNATE_SETTING 0xFE4F +#define REG_USB_INT_BINTERVAL 0xFE6E +#define REG_USB_GPS_EP_CONFIG 0xFE6D + +#endif /* __HALMAC_COM_REG_H__ */
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_reg_8822b.h new file +733 -0
733 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 7/19 rtlwifi: halmac: add bit field definitions
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
List bit fields belong to their registers.
--- .../wireless/realtek/rtlwifi/halmac/halmac_bit2.h | 18234 +++++++++++++++++++ 1 file changed, 18234 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_bit2.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_bit2.h new file +18234 -0
@@ -0,0 +1,18234 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef __RTL_WLAN_BITDEF_H__ +#define __RTL_WLAN_BITDEF_H__ + +#define CPU_OPT_WIDTH 0x1F + +#define BIT_QUEUE_MACID_AC_NOT_THE_SAME BIT(31) + +#define BIT_SHIFT_GTAB_ID 28 +#define BIT_MASK_GTAB_ID 0x7 +#define BIT_GTAB_ID (x) (((x) & BIT_MASK_GTAB_ID) << BIT_SHIFT_GTAB_ID) +#define BITS_GTAB_ID (BIT_MASK_GTAB_ID << BIT_SHIFT_GTAB_ID) +#define BIT_CLEAR_GTAB_ID (x) ((x) & (~BITS_GTAB_ID)) +#define BIT_GET_GTAB_ID (x) (((x) >> BIT_SHIFT_GTAB_ID) & BIT_MASK_GTAB_ID) +#define BIT_SET_GTAB_ID (x, v) (BIT_CLEAR_GTAB_ID(x) | BIT_GTAB_ID(v)) + +#define BIT_MULRW BIT(27) + +#define BIT_QUEUE_MACID_AC_NOT_THE_SAME_V1 BIT(15) + +#define BIT_SHIFT_XTAL_DRV_RF1 13 +#define BIT_MASK_XTAL_DRV_RF1 0x3 +#define BIT_XTAL_DRV_RF1 (x) \ + (((x) & BIT_MASK_XTAL_DRV_RF1) << BIT_SHIFT_XTAL_DRV_RF1) +#define BITS_XTAL_DRV_RF1 (BIT_MASK_XTAL_DRV_RF1 << BIT_SHIFT_XTAL_DRV_RF1) +#define BIT_CLEAR_XTAL_DRV_RF1 (x) ((x) & (~BITS_XTAL_DRV_RF1)) +#define BIT_GET_XTAL_DRV_RF1 (x) \ + (((x) >> BIT_SHIFT_XTAL_DRV_RF1) & BIT_MASK_XTAL_DRV_RF1) +#define BIT_SET_XTAL_DRV_RF1 (x, v) \ + (BIT_CLEAR_XTAL_DRV_RF1(x) | BIT_XTAL_DRV_RF1(v)) + +#define BIT_SHIFT_GTAB_ID_V1 12 +#define BIT_MASK_GTAB_ID_V1 0x7 +#define BIT_GTAB_ID_V1 (x) (((x) & BIT_MASK_GTAB_ID_V1) << BIT_SHIFT_GTAB_ID_V1) +#define BITS_GTAB_ID_V1 (BIT_MASK_GTAB_ID_V1 << BIT_SHIFT_GTAB_ID_V1) +#define BIT_CLEAR_GTAB_ID_V1 (x) ((x) & (~BITS_GTAB_ID_V1)) +#define BIT_GET_GTAB_ID_V1 (x) \ + (((x) >> BIT_SHIFT_GTAB_ID_V1) & BIT_MASK_GTAB_ID_V1) +#define BIT_SET_GTAB_ID_V1 (x, v) (BIT_CLEAR_GTAB_ID_V1(x) | BIT_GTAB_ID_V1(v)) + +#define BIT_SHIFT_WATCH_DOG_RECORD_V1 10 +#define BIT_MASK_WATCH_DOG_RECORD_V1 0x3fff +#define BIT_WATCH_DOG_RECORD_V1 (x) \ + (((x) & BIT_MASK_WATCH_DOG_RECORD_V1) << BIT_SHIFT_WATCH_DOG_RECORD_V1) +#define BITS_WATCH_DOG_RECORD_V1 \ + (BIT_MASK_WATCH_DOG_RECORD_V1 << BIT_SHIFT_WATCH_DOG_RECORD_V1) +#define BIT_CLEAR_WATCH_DOG_RECORD_V1 (x) ((x) & (~BITS_WATCH_DOG_RECORD_V1)) +#define BIT_GET_WATCH_DOG_RECORD_V1 (x) \ + (((x) >> BIT_SHIFT_WATCH_DOG_RECORD_V1) & BIT_MASK_WATCH_DOG_RECORD_V1) +#define BIT_SET_WATCH_DOG_RECORD_V1 (x, v) \ + (BIT_CLEAR_WATCH_DOG_RECORD_V1(x) | BIT_WATCH_DOG_RECORD_V1(v)) + +#define BIT_R_IO_TIMEOUT_FLAG_V1 BIT(9) + +#define BIT_DIS_TXDMA_PRE BIT(7) + +#define BIT_DIS_RXDMA_PRE BIT(6) + +#define BIT_TXFLAG_EXIT_L1_EN BIT(2) + +#define BIT_MCUFWDL_EN BIT(0) + +#define BIT_ISO_MD2PP BIT(0) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_SHIFT_SDIO_INT_TIMEOUT 16 +#define BIT_MASK_SDIO_INT_TIMEOUT 0xffff +#define BIT_SDIO_INT_TIMEOUT (x) \ + (((x) & BIT_MASK_SDIO_INT_TIMEOUT) << BIT_SHIFT_SDIO_INT_TIMEOUT) +#define BITS_SDIO_INT_TIMEOUT \ + (BIT_MASK_SDIO_INT_TIMEOUT << BIT_SHIFT_SDIO_INT_TIMEOUT) +#define BIT_CLEAR_SDIO_INT_TIMEOUT (x) ((x) & (~BITS_SDIO_INT_TIMEOUT)) +#define BIT_GET_SDIO_INT_TIMEOUT (x) \ + (((x) >> BIT_SHIFT_SDIO_INT_TIMEOUT) & BIT_MASK_SDIO_INT_TIMEOUT) +#define BIT_SET_SDIO_INT_TIMEOUT (x, v) \ + (BIT_CLEAR_SDIO_INT_TIMEOUT(x) | BIT_SDIO_INT_TIMEOUT(v)) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_PWC_EV12V BIT(15) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_IO_ERR_STATUS BIT(15) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_PWC_EV25V BIT(14) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_PA33V_EN BIT(13) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_PA12V_EN BIT(12) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_UA33V_EN BIT(11) +#define BIT_UA12V_EN BIT(10) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_RFDIO BIT(9) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_REPLY_ERRCRC_IN_DATA BIT(9) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_EB2CORE BIT(8) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_EN_CMD53_OVERLAP BIT(8) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_DIOE BIT(7) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_REPLY_ERR_IN_R5 BIT(7) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_WLPON2PP BIT(6) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_R18A_EN BIT(6) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_IP2MAC_WA2PP BIT(5) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_SDIO_CMD_FORCE_VLD BIT(5) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_PD2CORE BIT(4) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_INIT_CMD_EN BIT(4) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_PA2PCIE BIT(3) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_UD2CORE BIT(2) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_EN_RXDMA_MASK_INT BIT(2) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_UA2USB BIT(1) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_EN_MASK_TIMER BIT(1) + +/* 2 REG_SYS_ISO_CTRL (Offset 0x0000) */ + +#define BIT_ISO_WD2PP BIT(0) + +/* 2 REG_SDIO_TX_CTRL (Offset 0x10250000) */ + +#define BIT_CMD_ERR_STOP_INT_EN BIT(0) + +/* 2 REG_SYS_FUNC_EN (Offset 0x0002) */ + +#define BIT_FEN_MREGEN BIT(15) +#define BIT_FEN_HWPDN BIT(14) + +/* 2 REG_SYS_FUNC_EN (Offset 0x0002) */ + +#define BIT_EN_25_1 BIT(13) + +/* 2 REG_SYS_FUNC_EN (Offset 0x0002) */ + +#define BIT_FEN_ELDR BIT(12) +#define BIT_FEN_DCORE BIT(11) +#define BIT_FEN_CPUEN BIT(10) +#define BIT_FEN_DIOE BIT(9) +#define BIT_FEN_PCIED BIT(8) +#define BIT_FEN_PPLL BIT(7) +#define BIT_FEN_PCIEA BIT(6) +#define BIT_FEN_DIO_PCIE BIT(5) +#define BIT_FEN_USBD BIT(4) +#define BIT_FEN_UPLL BIT(3) +#define BIT_FEN_USBA BIT(2) + +/* 2 REG_SYS_FUNC_EN (Offset 0x0002) */ + +#define BIT_FEN_BB_GLB_RSTN BIT(1) +#define BIT_FEN_BBRSTB BIT(0) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_SOP_EABM BIT(31) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_SOP_ACKF BIT(30) +#define BIT_SOP_ERCK BIT(29) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_SOP_ESWR BIT(28) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_SOP_PWMM BIT(27) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_SOP_EECK BIT(26) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_SOP_EXTL BIT(24) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_SYM_OP_RING_12M BIT(22) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_ROP_SWPR BIT(21) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_DIS_HW_LPLDM BIT(20) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_OPT_SWRST_WLMCU BIT(19) +#define BIT_RDY_SYSPWR BIT(17) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_EN_WLON BIT(16) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_APDM_HPDN BIT(15) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_AFSM_PCIE_SUS_EN BIT(12) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_AFSM_WLSUS_EN BIT(11) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_APFM_SWLPS BIT(10) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_APFM_OFFMAC BIT(9) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_APFN_ONMAC BIT(8) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_CHIP_PDN_EN BIT(7) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_RDY_MACDIS BIT(6) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_RING_CLK_12M_EN BIT(4) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_PFM_WOWL BIT(3) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_PFM_LDKP BIT(2) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_WL_HCI_ALD BIT(1) + +/* 2 REG_SYS_PW_CTRL (Offset 0x0004) */ + +#define BIT_PFM_LDALL BIT(0) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_LDO_DUMMY BIT(15) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_CPU_CLK_EN BIT(14) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_SYMREG_CLK_EN BIT(13) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_HCI_CLK_EN BIT(12) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_MAC_CLK_EN BIT(11) +#define BIT_SEC_CLK_EN BIT(10) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_PHY_SSC_RSTB BIT(9) +#define BIT_EXT_32K_EN BIT(8) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_WL_CLK_TEST BIT(7) +#define BIT_OP_SPS_PWM_EN BIT(6) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_LOADER_CLK_EN BIT(5) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_MACSLP BIT(4) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_WAKEPAD_EN BIT(3) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_ROMD16V_EN BIT(2) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_CKANA12M_EN BIT(1) + +/* 2 REG_SYS_CLK_CTRL (Offset 0x0008) */ + +#define BIT_CNTD16V_EN BIT(0) + +/* 2 REG_SYS_EEPROM_CTRL (Offset 0x000A) */ + +#define BIT_SHIFT_VPDIDX 8 +#define BIT_MASK_VPDIDX 0xff +#define BIT_VPDIDX (x) (((x) & BIT_MASK_VPDIDX) << BIT_SHIFT_VPDIDX) +#define BITS_VPDIDX (BIT_MASK_VPDIDX << BIT_SHIFT_VPDIDX) +#define BIT_CLEAR_VPDIDX (x) ((x) & (~BITS_VPDIDX)) +#define BIT_GET_VPDIDX (x) (((x) >> BIT_SHIFT_VPDIDX) & BIT_MASK_VPDIDX) +#define BIT_SET_VPDIDX (x, v) (BIT_CLEAR_VPDIDX(x) | BIT_VPDIDX(v)) + +#define BIT_SHIFT_EEM1_0 6 +#define BIT_MASK_EEM1_0 0x3 +#define BIT_EEM1_0 (x) (((x) & BIT_MASK_EEM1_0) << BIT_SHIFT_EEM1_0) +#define BITS_EEM1_0 (BIT_MASK_EEM1_0 << BIT_SHIFT_EEM1_0) +#define BIT_CLEAR_EEM1_0 (x) ((x) & (~BITS_EEM1_0)) +#define BIT_GET_EEM1_0 (x) (((x) >> BIT_SHIFT_EEM1_0) & BIT_MASK_EEM1_0) +#define BIT_SET_EEM1_0 (x, v) (BIT_CLEAR_EEM1_0(x) | BIT_EEM1_0(v)) + +#define BIT_AUTOLOAD_SUS BIT(5) + +/* 2 REG_SYS_EEPROM_CTRL (Offset 0x000A) */ + +#define BIT_EERPOMSEL BIT(4) + +/* 2 REG_SYS_EEPROM_CTRL (Offset 0x000A) */ + +#define BIT_EECS_V1 BIT(3) +#define BIT_EESK_V1 BIT(2) +#define BIT_EEDI_V1 BIT(1) +#define BIT_EEDO_V1 BIT(0) + +/* 2 REG_EE_VPD (Offset 0x000C) */ + +#define BIT_SHIFT_VPD_DATA 0 +#define BIT_MASK_VPD_DATA 0xffffffffL +#define BIT_VPD_DATA (x) (((x) & BIT_MASK_VPD_DATA) << BIT_SHIFT_VPD_DATA) +#define BITS_VPD_DATA (BIT_MASK_VPD_DATA << BIT_SHIFT_VPD_DATA) +#define BIT_CLEAR_VPD_DATA (x) ((x) & (~BITS_VPD_DATA)) +#define BIT_GET_VPD_DATA (x) (((x) >> BIT_SHIFT_VPD_DATA) & BIT_MASK_VPD_DATA) +#define BIT_SET_VPD_DATA (x, v) (BIT_CLEAR_VPD_DATA(x) | BIT_VPD_DATA(v)) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_C2_L_BIT0 BIT(31) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SHIFT_C1_L 29 +#define BIT_MASK_C1_L 0x3 +#define BIT_C1_L (x) (((x) & BIT_MASK_C1_L) << BIT_SHIFT_C1_L) +#define BITS_C1_L (BIT_MASK_C1_L << BIT_SHIFT_C1_L) +#define BIT_CLEAR_C1_L (x) ((x) & (~BITS_C1_L)) +#define BIT_GET_C1_L (x) (((x) >> BIT_SHIFT_C1_L) & BIT_MASK_C1_L) +#define BIT_SET_C1_L (x, v) (BIT_CLEAR_C1_L(x) | BIT_C1_L(v)) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SHIFT_REG_FREQ_L 25 +#define BIT_MASK_REG_FREQ_L 0x7 +#define BIT_REG_FREQ_L (x) (((x) & BIT_MASK_REG_FREQ_L) << BIT_SHIFT_REG_FREQ_L) +#define BITS_REG_FREQ_L (BIT_MASK_REG_FREQ_L << BIT_SHIFT_REG_FREQ_L) +#define BIT_CLEAR_REG_FREQ_L (x) ((x) & (~BITS_REG_FREQ_L)) +#define BIT_GET_REG_FREQ_L (x) \ + (((x) >> BIT_SHIFT_REG_FREQ_L) & BIT_MASK_REG_FREQ_L) +#define BIT_SET_REG_FREQ_L (x, v) (BIT_CLEAR_REG_FREQ_L(x) | BIT_REG_FREQ_L(v)) + +#define BIT_REG_EN_DUTY BIT(24) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SHIFT_REG_MODE 22 +#define BIT_MASK_REG_MODE 0x3 +#define BIT_REG_MODE (x) (((x) & BIT_MASK_REG_MODE) << BIT_SHIFT_REG_MODE) +#define BITS_REG_MODE (BIT_MASK_REG_MODE << BIT_SHIFT_REG_MODE) +#define BIT_CLEAR_REG_MODE (x) ((x) & (~BITS_REG_MODE)) +#define BIT_GET_REG_MODE (x) (((x) >> BIT_SHIFT_REG_MODE) & BIT_MASK_REG_MODE) +#define BIT_SET_REG_MODE (x, v) (BIT_CLEAR_REG_MODE(x) | BIT_REG_MODE(v)) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_REG_EN_SP BIT(21) +#define BIT_REG_AUTO_L BIT(20) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SW18_SELD_BIT0 BIT(19) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SW18_POWOCP BIT(18) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SHIFT_OCP_L1 15 +#define BIT_MASK_OCP_L1 0x7 +#define BIT_OCP_L1 (x) (((x) & BIT_MASK_OCP_L1) << BIT_SHIFT_OCP_L1) +#define BITS_OCP_L1 (BIT_MASK_OCP_L1 << BIT_SHIFT_OCP_L1) +#define BIT_CLEAR_OCP_L1 (x) ((x) & (~BITS_OCP_L1)) +#define BIT_GET_OCP_L1 (x) (((x) >> BIT_SHIFT_OCP_L1) & BIT_MASK_OCP_L1) +#define BIT_SET_OCP_L1 (x, v) (BIT_CLEAR_OCP_L1(x) | BIT_OCP_L1(v)) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SHIFT_CF_L 13 +#define BIT_MASK_CF_L 0x3 +#define BIT_CF_L (x) (((x) & BIT_MASK_CF_L) << BIT_SHIFT_CF_L) +#define BITS_CF_L (BIT_MASK_CF_L << BIT_SHIFT_CF_L) +#define BIT_CLEAR_CF_L (x) ((x) & (~BITS_CF_L)) +#define BIT_GET_CF_L (x) (((x) >> BIT_SHIFT_CF_L) & BIT_MASK_CF_L) +#define BIT_SET_CF_L (x, v) (BIT_CLEAR_CF_L(x) | BIT_CF_L(v)) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SW18_FPWM BIT(11) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_SW18_SWEN BIT(9) +#define BIT_SW18_LDEN BIT(8) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_MAC_ID_EN BIT(7) + +/* 2 REG_SYS_SWR_CTRL1 (Offset 0x0010) */ + +#define BIT_AFE_BGEN BIT(0) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_POW_ZCD_L BIT(31) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_CRCERR_MSK BIT(31) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_HSISR3_IND_MSK BIT(30) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_AUTOZCD_L BIT(30) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_HSISR2_IND_MSK BIT(29) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_REG_DELAY 28 +#define BIT_MASK_REG_DELAY 0x3 +#define BIT_REG_DELAY (x) (((x) & BIT_MASK_REG_DELAY) << BIT_SHIFT_REG_DELAY) +#define BITS_REG_DELAY (BIT_MASK_REG_DELAY << BIT_SHIFT_REG_DELAY) +#define BIT_CLEAR_REG_DELAY (x) ((x) & (~BITS_REG_DELAY)) +#define BIT_GET_REG_DELAY (x) (((x) >> BIT_SHIFT_REG_DELAY) & BIT_MASK_REG_DELAY) +#define BIT_SET_REG_DELAY (x, v) (BIT_CLEAR_REG_DELAY(x) | BIT_REG_DELAY(v)) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_HEISR_IND_MSK BIT(28) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_CTWEND_MSK BIT(27) +#define BIT_SDIO_ATIMEND_E_MSK BIT(26) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIIO_ATIMEND_MSK BIT(25) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_OCPINT_MSK BIT(24) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_V15ADJ_L1_V1 24 +#define BIT_MASK_V15ADJ_L1_V1 0x7 +#define BIT_V15ADJ_L1_V1 (x) \ + (((x) & BIT_MASK_V15ADJ_L1_V1) << BIT_SHIFT_V15ADJ_L1_V1) +#define BITS_V15ADJ_L1_V1 (BIT_MASK_V15ADJ_L1_V1 << BIT_SHIFT_V15ADJ_L1_V1) +#define BIT_CLEAR_V15ADJ_L1_V1 (x) ((x) & (~BITS_V15ADJ_L1_V1)) +#define BIT_GET_V15ADJ_L1_V1 (x) \ + (((x) >> BIT_SHIFT_V15ADJ_L1_V1) & BIT_MASK_V15ADJ_L1_V1) +#define BIT_SET_V15ADJ_L1_V1 (x, v) \ + (BIT_CLEAR_V15ADJ_L1_V1(x) | BIT_V15ADJ_L1_V1(v)) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_PSTIMEOUT_MSK BIT(23) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_GTINT4_MSK BIT(22) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_GTINT3_MSK BIT(21) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_HSISR_IND_MSK BIT(20) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_VOL_L1_V1 20 +#define BIT_MASK_VOL_L1_V1 0xf +#define BIT_VOL_L1_V1 (x) (((x) & BIT_MASK_VOL_L1_V1) << BIT_SHIFT_VOL_L1_V1) +#define BITS_VOL_L1_V1 (BIT_MASK_VOL_L1_V1 << BIT_SHIFT_VOL_L1_V1) +#define BIT_CLEAR_VOL_L1_V1 (x) ((x) & (~BITS_VOL_L1_V1)) +#define BIT_GET_VOL_L1_V1 (x) (((x) >> BIT_SHIFT_VOL_L1_V1) & BIT_MASK_VOL_L1_V1) +#define BIT_SET_VOL_L1_V1 (x, v) (BIT_CLEAR_VOL_L1_V1(x) | BIT_VOL_L1_V1(v)) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_CPWM2_MSK BIT(19) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_CPWM1_MSK BIT(18) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_C2HCMD_INT_MSK BIT(17) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_IN_L1_V1 17 +#define BIT_MASK_IN_L1_V1 0x7 +#define BIT_IN_L1_V1 (x) (((x) & BIT_MASK_IN_L1_V1) << BIT_SHIFT_IN_L1_V1) +#define BITS_IN_L1_V1 (BIT_MASK_IN_L1_V1 << BIT_SHIFT_IN_L1_V1) +#define BIT_CLEAR_IN_L1_V1 (x) ((x) & (~BITS_IN_L1_V1)) +#define BIT_GET_IN_L1_V1 (x) (((x) >> BIT_SHIFT_IN_L1_V1) & BIT_MASK_IN_L1_V1) +#define BIT_SET_IN_L1_V1 (x, v) (BIT_CLEAR_IN_L1_V1(x) | BIT_IN_L1_V1(v)) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_BCNERLY_INT_MSK BIT(16) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_TBOX_L1 15 +#define BIT_MASK_TBOX_L1 0x3 +#define BIT_TBOX_L1 (x) (((x) & BIT_MASK_TBOX_L1) << BIT_SHIFT_TBOX_L1) +#define BITS_TBOX_L1 (BIT_MASK_TBOX_L1 << BIT_SHIFT_TBOX_L1) +#define BIT_CLEAR_TBOX_L1 (x) ((x) & (~BITS_TBOX_L1)) +#define BIT_GET_TBOX_L1 (x) (((x) >> BIT_SHIFT_TBOX_L1) & BIT_MASK_TBOX_L1) +#define BIT_SET_TBOX_L1 (x, v) (BIT_CLEAR_TBOX_L1(x) | BIT_TBOX_L1(v)) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SW18_SEL BIT(13) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SW18_SD BIT(10) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_TXBCNERR_MSK BIT(7) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_R3_L 7 +#define BIT_MASK_R3_L 0x3 +#define BIT_R3_L (x) (((x) & BIT_MASK_R3_L) << BIT_SHIFT_R3_L) +#define BITS_R3_L (BIT_MASK_R3_L << BIT_SHIFT_R3_L) +#define BIT_CLEAR_R3_L (x) ((x) & (~BITS_R3_L)) +#define BIT_GET_R3_L (x) (((x) >> BIT_SHIFT_R3_L) & BIT_MASK_R3_L) +#define BIT_SET_R3_L (x, v) (BIT_CLEAR_R3_L(x) | BIT_R3_L(v)) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_TXBCNOK_MSK BIT(6) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_SW18_R2 5 +#define BIT_MASK_SW18_R2 0x3 +#define BIT_SW18_R2 (x) (((x) & BIT_MASK_SW18_R2) << BIT_SHIFT_SW18_R2) +#define BITS_SW18_R2 (BIT_MASK_SW18_R2 << BIT_SHIFT_SW18_R2) +#define BIT_CLEAR_SW18_R2 (x) ((x) & (~BITS_SW18_R2)) +#define BIT_GET_SW18_R2 (x) (((x) >> BIT_SHIFT_SW18_R2) & BIT_MASK_SW18_R2) +#define BIT_SET_SW18_R2 (x, v) (BIT_CLEAR_SW18_R2(x) | BIT_SW18_R2(v)) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_RXFOVW_MSK BIT(5) +#define BIT_SDIO_TXFOVW_MSK BIT(4) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_SW18_R1 3 +#define BIT_MASK_SW18_R1 0x3 +#define BIT_SW18_R1 (x) (((x) & BIT_MASK_SW18_R1) << BIT_SHIFT_SW18_R1) +#define BITS_SW18_R1 (BIT_MASK_SW18_R1 << BIT_SHIFT_SW18_R1) +#define BIT_CLEAR_SW18_R1 (x) ((x) & (~BITS_SW18_R1)) +#define BIT_GET_SW18_R1 (x) (((x) >> BIT_SHIFT_SW18_R1) & BIT_MASK_SW18_R1) +#define BIT_SET_SW18_R1 (x, v) (BIT_CLEAR_SW18_R1(x) | BIT_SW18_R1(v)) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_RXERR_MSK BIT(3) +#define BIT_SDIO_TXERR_MSK BIT(2) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_SDIO_AVAL_MSK BIT(1) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_SHIFT_C3_L_C3 1 +#define BIT_MASK_C3_L_C3 0x3 +#define BIT_C3_L_C3 (x) (((x) & BIT_MASK_C3_L_C3) << BIT_SHIFT_C3_L_C3) +#define BITS_C3_L_C3 (BIT_MASK_C3_L_C3 << BIT_SHIFT_C3_L_C3) +#define BIT_CLEAR_C3_L_C3 (x) ((x) & (~BITS_C3_L_C3)) +#define BIT_GET_C3_L_C3 (x) (((x) >> BIT_SHIFT_C3_L_C3) & BIT_MASK_C3_L_C3) +#define BIT_SET_C3_L_C3 (x, v) (BIT_CLEAR_C3_L_C3(x) | BIT_C3_L_C3(v)) + +/* 2 REG_SDIO_HIMR (Offset 0x10250014) */ + +#define BIT_RX_REQUEST_MSK BIT(0) + +/* 2 REG_SYS_SWR_CTRL2 (Offset 0x0014) */ + +#define BIT_C2_L_BIT1 BIT(0) + +/* 2 REG_SYS_SWR_CTRL3 (Offset 0x0018) */ + +#define BIT_SPS18_OCP_DIS BIT(31) + +/* 2 REG_SDIO_HISR (Offset 0x10250018) */ + +#define BIT_SDIO_CRCERR BIT(31) + +/* 2 REG_SDIO_HISR (Offset 0x10250018) */ + +#define BIT_SDIO_HSISR3_IND BIT(30) +#define BIT_SDIO_HSISR2_IND BIT(29) +#define BIT_SDIO_HEISR_IND BIT(28) + +/* 2 REG_SDIO_HISR (Offset 0x10250018) */ + +#define BIT_SDIO_CTWEND BIT(27) +#define BIT_SDIO_ATIMEND_E BIT(26) +#define BIT_SDIO_ATIMEND BIT(25) +#define BIT_SDIO_OCPINT BIT(24) +#define BIT_SDIO_PSTIMEOUT BIT(23) +#define BIT_SDIO_GTINT4 BIT(22) +#define BIT_SDIO_GTINT3 BIT(21) +#define BIT_SDIO_HSISR_IND BIT(20) +#define BIT_SDIO_CPWM2 BIT(19) +#define BIT_SDIO_CPWM1 BIT(18) +#define BIT_SDIO_C2HCMD_INT BIT(17) + +/* 2 REG_SYS_SWR_CTRL3 (Offset 0x0018) */ + +#define BIT_SHIFT_SPS18_OCP_TH 16 +#define BIT_MASK_SPS18_OCP_TH 0x7fff +#define BIT_SPS18_OCP_TH (x) \ + (((x) & BIT_MASK_SPS18_OCP_TH) << BIT_SHIFT_SPS18_OCP_TH) +#define BITS_SPS18_OCP_TH (BIT_MASK_SPS18_OCP_TH << BIT_SHIFT_SPS18_OCP_TH) +#define BIT_CLEAR_SPS18_OCP_TH (x) ((x) & (~BITS_SPS18_OCP_TH)) +#define BIT_GET_SPS18_OCP_TH (x) \ + (((x) >> BIT_SHIFT_SPS18_OCP_TH) & BIT_MASK_SPS18_OCP_TH) +#define BIT_SET_SPS18_OCP_TH (x, v) \ + (BIT_CLEAR_SPS18_OCP_TH(x) | BIT_SPS18_OCP_TH(v)) + +/* 2 REG_SDIO_HISR (Offset 0x10250018) */ + +#define BIT_SDIO_BCNERLY_INT BIT(16) +#define BIT_SDIO_TXBCNERR BIT(7) +#define BIT_SDIO_TXBCNOK BIT(6) +#define BIT_SDIO_RXFOVW BIT(5) +#define BIT_SDIO_TXFOVW BIT(4) +#define BIT_SDIO_RXERR BIT(3) +#define BIT_SDIO_TXERR BIT(2) +#define BIT_SDIO_AVAL BIT(1) + +/* 2 REG_SYS_SWR_CTRL3 (Offset 0x0018) */ + +#define BIT_SHIFT_OCP_WINDOW 0 +#define BIT_MASK_OCP_WINDOW 0xffff +#define BIT_OCP_WINDOW (x) (((x) & BIT_MASK_OCP_WINDOW) << BIT_SHIFT_OCP_WINDOW) +#define BITS_OCP_WINDOW (BIT_MASK_OCP_WINDOW << BIT_SHIFT_OCP_WINDOW) +#define BIT_CLEAR_OCP_WINDOW (x) ((x) & (~BITS_OCP_WINDOW)) +#define BIT_GET_OCP_WINDOW (x) \ + (((x) >> BIT_SHIFT_OCP_WINDOW) & BIT_MASK_OCP_WINDOW) +#define BIT_SET_OCP_WINDOW (x, v) (BIT_CLEAR_OCP_WINDOW(x) | BIT_OCP_WINDOW(v)) + +/* 2 REG_SDIO_HISR (Offset 0x10250018) */ + +#define BIT_RX_REQUEST BIT(0) + +/* 2 REG_RSV_CTRL (Offset 0x001C) */ + +#define BIT_HREG_DBG BIT(23) + +/* 2 REG_RSV_CTRL (Offset 0x001C) */ + +#define BIT_WLMCUIOIF BIT(8) + +/* 2 REG_RSV_CTRL (Offset 0x001C) */ + +#define BIT_LOCK_ALL_EN BIT(7) + +/* 2 REG_RSV_CTRL (Offset 0x001C) */ + +#define BIT_R_DIS_PRST BIT(6) + +/* 2 REG_RSV_CTRL (Offset 0x001C) */ + +#define BIT_WLOCK_1C_B6 BIT(5) + +/* 2 REG_RSV_CTRL (Offset 0x001C) */ + +#define BIT_WLOCK_40 BIT(4) +#define BIT_WLOCK_08 BIT(3) +#define BIT_WLOCK_04 BIT(2) +#define BIT_WLOCK_00 BIT(1) +#define BIT_WLOCK_ALL BIT(0) + +/* 2 REG_SDIO_RX_REQ_LEN (Offset 0x1025001C) */ + +#define BIT_SHIFT_RX_REQ_LEN_V1 0 +#define BIT_MASK_RX_REQ_LEN_V1 0x3ffff +#define BIT_RX_REQ_LEN_V1 (x) \ + (((x) & BIT_MASK_RX_REQ_LEN_V1) << BIT_SHIFT_RX_REQ_LEN_V1) +#define BITS_RX_REQ_LEN_V1 (BIT_MASK_RX_REQ_LEN_V1 << BIT_SHIFT_RX_REQ_LEN_V1) +#define BIT_CLEAR_RX_REQ_LEN_V1 (x) ((x) & (~BITS_RX_REQ_LEN_V1)) +#define BIT_GET_RX_REQ_LEN_V1 (x) \ + (((x) >> BIT_SHIFT_RX_REQ_LEN_V1) & BIT_MASK_RX_REQ_LEN_V1) +#define BIT_SET_RX_REQ_LEN_V1 (x, v) \ + (BIT_CLEAR_RX_REQ_LEN_V1(x) | BIT_RX_REQ_LEN_V1(v)) + +/* 2 REG_RF_CTRL (Offset 0x001F) */ + +#define BIT_RF_SDMRSTB BIT(2) + +/* 2 REG_RF_CTRL (Offset 0x001F) */ + +#define BIT_RF_RSTB BIT(1) + +/* 2 REG_RF_CTRL (Offset 0x001F) */ + +#define BIT_RF_EN BIT(0) + +/* 2 REG_SDIO_FREE_TXPG_SEQ_V1 (Offset 0x1025001F) */ + +#define BIT_SHIFT_FREE_TXPG_SEQ 0 +#define BIT_MASK_FREE_TXPG_SEQ 0xff +#define BIT_FREE_TXPG_SEQ (x) \ + (((x) & BIT_MASK_FREE_TXPG_SEQ) << BIT_SHIFT_FREE_TXPG_SEQ) +#define BITS_FREE_TXPG_SEQ (BIT_MASK_FREE_TXPG_SEQ << BIT_SHIFT_FREE_TXPG_SEQ) +#define BIT_CLEAR_FREE_TXPG_SEQ (x) ((x) & (~BITS_FREE_TXPG_SEQ)) +#define BIT_GET_FREE_TXPG_SEQ (x) \ + (((x) >> BIT_SHIFT_FREE_TXPG_SEQ) & BIT_MASK_FREE_TXPG_SEQ) +#define BIT_SET_FREE_TXPG_SEQ (x, v) \ + (BIT_CLEAR_FREE_TXPG_SEQ(x) | BIT_FREE_TXPG_SEQ(v)) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_SHIFT_LPLDH12_RSV 29 +#define BIT_MASK_LPLDH12_RSV 0x7 +#define BIT_LPLDH12_RSV (x) \ + (((x) & BIT_MASK_LPLDH12_RSV) << BIT_SHIFT_LPLDH12_RSV) +#define BITS_LPLDH12_RSV (BIT_MASK_LPLDH12_RSV << BIT_SHIFT_LPLDH12_RSV) +#define BIT_CLEAR_LPLDH12_RSV (x) ((x) & (~BITS_LPLDH12_RSV)) +#define BIT_GET_LPLDH12_RSV (x) \ + (((x) >> BIT_SHIFT_LPLDH12_RSV) & BIT_MASK_LPLDH12_RSV) +#define BIT_SET_LPLDH12_RSV (x, v) \ + (BIT_CLEAR_LPLDH12_RSV(x) | BIT_LPLDH12_RSV(v)) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_LPLDH12_SLP BIT(28) + +#define BIT_SHIFT_LPLDH12_VADJ 24 +#define BIT_MASK_LPLDH12_VADJ 0xf +#define BIT_LPLDH12_VADJ (x) \ + (((x) & BIT_MASK_LPLDH12_VADJ) << BIT_SHIFT_LPLDH12_VADJ) +#define BITS_LPLDH12_VADJ (BIT_MASK_LPLDH12_VADJ << BIT_SHIFT_LPLDH12_VADJ) +#define BIT_CLEAR_LPLDH12_VADJ (x) ((x) & (~BITS_LPLDH12_VADJ)) +#define BIT_GET_LPLDH12_VADJ (x) \ + (((x) >> BIT_SHIFT_LPLDH12_VADJ) & BIT_MASK_LPLDH12_VADJ) +#define BIT_SET_LPLDH12_VADJ (x, v) \ + (BIT_CLEAR_LPLDH12_VADJ(x) | BIT_LPLDH12_VADJ(v)) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_LDH12_EN BIT(16) + +/* 2 REG_SDIO_FREE_TXPG (Offset 0x10250020) */ + +#define BIT_SHIFT_MID_FREEPG_V1 16 +#define BIT_MASK_MID_FREEPG_V1 0xfff +#define BIT_MID_FREEPG_V1 (x) \ + (((x) & BIT_MASK_MID_FREEPG_V1) << BIT_SHIFT_MID_FREEPG_V1) +#define BITS_MID_FREEPG_V1 (BIT_MASK_MID_FREEPG_V1 << BIT_SHIFT_MID_FREEPG_V1) +#define BIT_CLEAR_MID_FREEPG_V1 (x) ((x) & (~BITS_MID_FREEPG_V1)) +#define BIT_GET_MID_FREEPG_V1 (x) \ + (((x) >> BIT_SHIFT_MID_FREEPG_V1) & BIT_MASK_MID_FREEPG_V1) +#define BIT_SET_MID_FREEPG_V1 (x, v) \ + (BIT_CLEAR_MID_FREEPG_V1(x) | BIT_MID_FREEPG_V1(v)) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_WLBBOFF_BIG_PWC_EN BIT(14) +#define BIT_WLBBOFF_SMALL_PWC_EN BIT(13) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_WLMACOFF_BIG_PWC_EN BIT(12) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_WLPON_PWC_EN BIT(11) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_POW_REGU_P1 BIT(10) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_LDOV12W_EN BIT(8) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_EX_XTAL_DRV_DIGI BIT(7) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_EX_XTAL_DRV_USB BIT(6) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_EX_XTAL_DRV_AFE BIT(5) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_EX_XTAL_DRV_RF2 BIT(4) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_EX_XTAL_DRV_RF1 BIT(3) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_POW_REGU_P0 BIT(2) + +/* 2 REG_AFE_LDO_CTRL (Offset 0x0020) */ + +#define BIT_POW_PLL_LDO BIT(0) + +/* 2 REG_SDIO_FREE_TXPG (Offset 0x10250020) */ + +#define BIT_SHIFT_HIQ_FREEPG_V1 0 +#define BIT_MASK_HIQ_FREEPG_V1 0xfff +#define BIT_HIQ_FREEPG_V1 (x) \ + (((x) & BIT_MASK_HIQ_FREEPG_V1) << BIT_SHIFT_HIQ_FREEPG_V1) +#define BITS_HIQ_FREEPG_V1 (BIT_MASK_HIQ_FREEPG_V1 << BIT_SHIFT_HIQ_FREEPG_V1) +#define BIT_CLEAR_HIQ_FREEPG_V1 (x) ((x) & (~BITS_HIQ_FREEPG_V1)) +#define BIT_GET_HIQ_FREEPG_V1 (x) \ + (((x) >> BIT_SHIFT_HIQ_FREEPG_V1) & BIT_MASK_HIQ_FREEPG_V1) +#define BIT_SET_HIQ_FREEPG_V1 (x, v) \ + (BIT_CLEAR_HIQ_FREEPG_V1(x) | BIT_HIQ_FREEPG_V1(v)) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_AGPIO_GPE BIT(31) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_SHIFT_XTAL_CAP_XI 25 +#define BIT_MASK_XTAL_CAP_XI 0x3f +#define BIT_XTAL_CAP_XI (x) \ + (((x) & BIT_MASK_XTAL_CAP_XI) << BIT_SHIFT_XTAL_CAP_XI) +#define BITS_XTAL_CAP_XI (BIT_MASK_XTAL_CAP_XI << BIT_SHIFT_XTAL_CAP_XI) +#define BIT_CLEAR_XTAL_CAP_XI (x) ((x) & (~BITS_XTAL_CAP_XI)) +#define BIT_GET_XTAL_CAP_XI (x) \ + (((x) >> BIT_SHIFT_XTAL_CAP_XI) & BIT_MASK_XTAL_CAP_XI) +#define BIT_SET_XTAL_CAP_XI (x, v) \ + (BIT_CLEAR_XTAL_CAP_XI(x) | BIT_XTAL_CAP_XI(v)) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_SHIFT_XTAL_DRV_DIGI 23 +#define BIT_MASK_XTAL_DRV_DIGI 0x3 +#define BIT_XTAL_DRV_DIGI (x) \ + (((x) & BIT_MASK_XTAL_DRV_DIGI) << BIT_SHIFT_XTAL_DRV_DIGI) +#define BITS_XTAL_DRV_DIGI (BIT_MASK_XTAL_DRV_DIGI << BIT_SHIFT_XTAL_DRV_DIGI) +#define BIT_CLEAR_XTAL_DRV_DIGI (x) ((x) & (~BITS_XTAL_DRV_DIGI)) +#define BIT_GET_XTAL_DRV_DIGI (x) \ + (((x) >> BIT_SHIFT_XTAL_DRV_DIGI) & BIT_MASK_XTAL_DRV_DIGI) +#define BIT_SET_XTAL_DRV_DIGI (x, v) \ + (BIT_CLEAR_XTAL_DRV_DIGI(x) | BIT_XTAL_DRV_DIGI(v)) + +#define BIT_XTAL_DRV_USB_BIT1 BIT(22) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_SHIFT_MAC_CLK_SEL 20 +#define BIT_MASK_MAC_CLK_SEL 0x3 +#define BIT_MAC_CLK_SEL (x) \ + (((x) & BIT_MASK_MAC_CLK_SEL) << BIT_SHIFT_MAC_CLK_SEL) +#define BITS_MAC_CLK_SEL (BIT_MASK_MAC_CLK_SEL << BIT_SHIFT_MAC_CLK_SEL) +#define BIT_CLEAR_MAC_CLK_SEL (x) ((x) & (~BITS_MAC_CLK_SEL)) +#define BIT_GET_MAC_CLK_SEL (x) \ + (((x) >> BIT_SHIFT_MAC_CLK_SEL) & BIT_MASK_MAC_CLK_SEL) +#define BIT_SET_MAC_CLK_SEL (x, v) \ + (BIT_CLEAR_MAC_CLK_SEL(x) | BIT_MAC_CLK_SEL(v)) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_XTAL_DRV_USB_BIT0 BIT(19) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_SHIFT_XTAL_DRV_AFE 17 +#define BIT_MASK_XTAL_DRV_AFE 0x3 +#define BIT_XTAL_DRV_AFE (x) \ + (((x) & BIT_MASK_XTAL_DRV_AFE) << BIT_SHIFT_XTAL_DRV_AFE) +#define BITS_XTAL_DRV_AFE (BIT_MASK_XTAL_DRV_AFE << BIT_SHIFT_XTAL_DRV_AFE) +#define BIT_CLEAR_XTAL_DRV_AFE (x) ((x) & (~BITS_XTAL_DRV_AFE)) +#define BIT_GET_XTAL_DRV_AFE (x) \ + (((x) >> BIT_SHIFT_XTAL_DRV_AFE) & BIT_MASK_XTAL_DRV_AFE) +#define BIT_SET_XTAL_DRV_AFE (x, v) \ + (BIT_CLEAR_XTAL_DRV_AFE(x) | BIT_XTAL_DRV_AFE(v)) + +/* 2 REG_SDIO_FREE_TXPG2 (Offset 0x10250024) */ + +#define BIT_SHIFT_PUB_FREEPG_V1 16 +#define BIT_MASK_PUB_FREEPG_V1 0xfff +#define BIT_PUB_FREEPG_V1 (x) \ + (((x) & BIT_MASK_PUB_FREEPG_V1) << BIT_SHIFT_PUB_FREEPG_V1) +#define BITS_PUB_FREEPG_V1 (BIT_MASK_PUB_FREEPG_V1 << BIT_SHIFT_PUB_FREEPG_V1) +#define BIT_CLEAR_PUB_FREEPG_V1 (x) ((x) & (~BITS_PUB_FREEPG_V1)) +#define BIT_GET_PUB_FREEPG_V1 (x) \ + (((x) >> BIT_SHIFT_PUB_FREEPG_V1) & BIT_MASK_PUB_FREEPG_V1) +#define BIT_SET_PUB_FREEPG_V1 (x, v) \ + (BIT_CLEAR_PUB_FREEPG_V1(x) | BIT_PUB_FREEPG_V1(v)) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_SHIFT_XTAL_DRV_RF2 15 +#define BIT_MASK_XTAL_DRV_RF2 0x3 +#define BIT_XTAL_DRV_RF2 (x) \ + (((x) & BIT_MASK_XTAL_DRV_RF2) << BIT_SHIFT_XTAL_DRV_RF2) +#define BITS_XTAL_DRV_RF2 (BIT_MASK_XTAL_DRV_RF2 << BIT_SHIFT_XTAL_DRV_RF2) +#define BIT_CLEAR_XTAL_DRV_RF2 (x) ((x) & (~BITS_XTAL_DRV_RF2)) +#define BIT_GET_XTAL_DRV_RF2 (x) \ + (((x) >> BIT_SHIFT_XTAL_DRV_RF2) & BIT_MASK_XTAL_DRV_RF2) +#define BIT_SET_XTAL_DRV_RF2 (x, v) \ + (BIT_CLEAR_XTAL_DRV_RF2(x) | BIT_XTAL_DRV_RF2(v)) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_XTAL_DELAY_DIGI BIT(12) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_XTAL_DELAY_USB BIT(11) +#define BIT_XTAL_DELAY_AFE BIT(10) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_SHIFT_XTAL_LDO_VREF 7 +#define BIT_MASK_XTAL_LDO_VREF 0x7 +#define BIT_XTAL_LDO_VREF (x) \ + (((x) & BIT_MASK_XTAL_LDO_VREF) << BIT_SHIFT_XTAL_LDO_VREF) +#define BITS_XTAL_LDO_VREF (BIT_MASK_XTAL_LDO_VREF << BIT_SHIFT_XTAL_LDO_VREF) +#define BIT_CLEAR_XTAL_LDO_VREF (x) ((x) & (~BITS_XTAL_LDO_VREF)) +#define BIT_GET_XTAL_LDO_VREF (x) \ + (((x) >> BIT_SHIFT_XTAL_LDO_VREF) & BIT_MASK_XTAL_LDO_VREF) +#define BIT_SET_XTAL_LDO_VREF (x, v) \ + (BIT_CLEAR_XTAL_LDO_VREF(x) | BIT_XTAL_LDO_VREF(v)) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_XTAL_XQSEL_RF BIT(6) +#define BIT_XTAL_XQSEL BIT(5) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_SHIFT_XTAL_GMN_V2 3 +#define BIT_MASK_XTAL_GMN_V2 0x3 +#define BIT_XTAL_GMN_V2 (x) \ + (((x) & BIT_MASK_XTAL_GMN_V2) << BIT_SHIFT_XTAL_GMN_V2) +#define BITS_XTAL_GMN_V2 (BIT_MASK_XTAL_GMN_V2 << BIT_SHIFT_XTAL_GMN_V2) +#define BIT_CLEAR_XTAL_GMN_V2 (x) ((x) & (~BITS_XTAL_GMN_V2)) +#define BIT_GET_XTAL_GMN_V2 (x) \ + (((x) >> BIT_SHIFT_XTAL_GMN_V2) & BIT_MASK_XTAL_GMN_V2) +#define BIT_SET_XTAL_GMN_V2 (x, v) \ + (BIT_CLEAR_XTAL_GMN_V2(x) | BIT_XTAL_GMN_V2(v)) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_SHIFT_XTAL_GMP_V2 1 +#define BIT_MASK_XTAL_GMP_V2 0x3 +#define BIT_XTAL_GMP_V2 (x) \ + (((x) & BIT_MASK_XTAL_GMP_V2) << BIT_SHIFT_XTAL_GMP_V2) +#define BITS_XTAL_GMP_V2 (BIT_MASK_XTAL_GMP_V2 << BIT_SHIFT_XTAL_GMP_V2) +#define BIT_CLEAR_XTAL_GMP_V2 (x) ((x) & (~BITS_XTAL_GMP_V2)) +#define BIT_GET_XTAL_GMP_V2 (x) \ + (((x) >> BIT_SHIFT_XTAL_GMP_V2) & BIT_MASK_XTAL_GMP_V2) +#define BIT_SET_XTAL_GMP_V2 (x, v) \ + (BIT_CLEAR_XTAL_GMP_V2(x) | BIT_XTAL_GMP_V2(v)) + +/* 2 REG_AFE_CTRL1 (Offset 0x0024) */ + +#define BIT_XTAL_EN BIT(0) + +/* 2 REG_SDIO_FREE_TXPG2 (Offset 0x10250024) */ + +#define BIT_SHIFT_LOW_FREEPG_V1 0 +#define BIT_MASK_LOW_FREEPG_V1 0xfff +#define BIT_LOW_FREEPG_V1 (x) \ + (((x) & BIT_MASK_LOW_FREEPG_V1) << BIT_SHIFT_LOW_FREEPG_V1) +#define BITS_LOW_FREEPG_V1 (BIT_MASK_LOW_FREEPG_V1 << BIT_SHIFT_LOW_FREEPG_V1) +#define BIT_CLEAR_LOW_FREEPG_V1 (x) ((x) & (~BITS_LOW_FREEPG_V1)) +#define BIT_GET_LOW_FREEPG_V1 (x) \ + (((x) >> BIT_SHIFT_LOW_FREEPG_V1) & BIT_MASK_LOW_FREEPG_V1) +#define BIT_SET_LOW_FREEPG_V1 (x, v) \ + (BIT_CLEAR_LOW_FREEPG_V1(x) | BIT_LOW_FREEPG_V1(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_REG_C3_V4 30 +#define BIT_MASK_REG_C3_V4 0x3 +#define BIT_REG_C3_V4 (x) (((x) & BIT_MASK_REG_C3_V4) << BIT_SHIFT_REG_C3_V4) +#define BITS_REG_C3_V4 (BIT_MASK_REG_C3_V4 << BIT_SHIFT_REG_C3_V4) +#define BIT_CLEAR_REG_C3_V4 (x) ((x) & (~BITS_REG_C3_V4)) +#define BIT_GET_REG_C3_V4 (x) (((x) >> BIT_SHIFT_REG_C3_V4) & BIT_MASK_REG_C3_V4) +#define BIT_SET_REG_C3_V4 (x, v) (BIT_CLEAR_REG_C3_V4(x) | BIT_REG_C3_V4(v)) + +#define BIT_REG_CP_BIT1 BIT(29) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_REG_RS_V4 26 +#define BIT_MASK_REG_RS_V4 0x7 +#define BIT_REG_RS_V4 (x) (((x) & BIT_MASK_REG_RS_V4) << BIT_SHIFT_REG_RS_V4) +#define BITS_REG_RS_V4 (BIT_MASK_REG_RS_V4 << BIT_SHIFT_REG_RS_V4) +#define BIT_CLEAR_REG_RS_V4 (x) ((x) & (~BITS_REG_RS_V4)) +#define BIT_GET_REG_RS_V4 (x) (((x) >> BIT_SHIFT_REG_RS_V4) & BIT_MASK_REG_RS_V4) +#define BIT_SET_REG_RS_V4 (x, v) (BIT_CLEAR_REG_RS_V4(x) | BIT_REG_RS_V4(v)) + +/* 2 REG_SDIO_OQT_FREE_TXPG_V1 (Offset 0x10250028) */ + +#define BIT_SHIFT_NOAC_OQT_FREEPG_V1 24 +#define BIT_MASK_NOAC_OQT_FREEPG_V1 0xff +#define BIT_NOAC_OQT_FREEPG_V1 (x) \ + (((x) & BIT_MASK_NOAC_OQT_FREEPG_V1) << BIT_SHIFT_NOAC_OQT_FREEPG_V1) +#define BITS_NOAC_OQT_FREEPG_V1 \ + (BIT_MASK_NOAC_OQT_FREEPG_V1 << BIT_SHIFT_NOAC_OQT_FREEPG_V1) +#define BIT_CLEAR_NOAC_OQT_FREEPG_V1 (x) ((x) & (~BITS_NOAC_OQT_FREEPG_V1)) +#define BIT_GET_NOAC_OQT_FREEPG_V1 (x) \ + (((x) >> BIT_SHIFT_NOAC_OQT_FREEPG_V1) & BIT_MASK_NOAC_OQT_FREEPG_V1) +#define BIT_SET_NOAC_OQT_FREEPG_V1 (x, v) \ + (BIT_CLEAR_NOAC_OQT_FREEPG_V1(x) | BIT_NOAC_OQT_FREEPG_V1(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_REG__CS 24 +#define BIT_MASK_REG__CS 0x3 +#define BIT_REG__CS (x) (((x) & BIT_MASK_REG__CS) << BIT_SHIFT_REG__CS) +#define BITS_REG__CS (BIT_MASK_REG__CS << BIT_SHIFT_REG__CS) +#define BIT_CLEAR_REG__CS (x) ((x) & (~BITS_REG__CS)) +#define BIT_GET_REG__CS (x) (((x) >> BIT_SHIFT_REG__CS) & BIT_MASK_REG__CS) +#define BIT_SET_REG__CS (x, v) (BIT_CLEAR_REG__CS(x) | BIT_REG__CS(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_REG_CP_OFFSET 21 +#define BIT_MASK_REG_CP_OFFSET 0x7 +#define BIT_REG_CP_OFFSET (x) \ + (((x) & BIT_MASK_REG_CP_OFFSET) << BIT_SHIFT_REG_CP_OFFSET) +#define BITS_REG_CP_OFFSET (BIT_MASK_REG_CP_OFFSET << BIT_SHIFT_REG_CP_OFFSET) +#define BIT_CLEAR_REG_CP_OFFSET (x) ((x) & (~BITS_REG_CP_OFFSET)) +#define BIT_GET_REG_CP_OFFSET (x) \ + (((x) >> BIT_SHIFT_REG_CP_OFFSET) & BIT_MASK_REG_CP_OFFSET) +#define BIT_SET_REG_CP_OFFSET (x, v) \ + (BIT_CLEAR_REG_CP_OFFSET(x) | BIT_REG_CP_OFFSET(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_CP_BIAS 18 +#define BIT_MASK_CP_BIAS 0x7 +#define BIT_CP_BIAS (x) (((x) & BIT_MASK_CP_BIAS) << BIT_SHIFT_CP_BIAS) +#define BITS_CP_BIAS (BIT_MASK_CP_BIAS << BIT_SHIFT_CP_BIAS) +#define BIT_CLEAR_CP_BIAS (x) ((x) & (~BITS_CP_BIAS)) +#define BIT_GET_CP_BIAS (x) (((x) >> BIT_SHIFT_CP_BIAS) & BIT_MASK_CP_BIAS) +#define BIT_SET_CP_BIAS (x, v) (BIT_CLEAR_CP_BIAS(x) | BIT_CP_BIAS(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_REG_IDOUBLE_V2 BIT(17) + +/* 2 REG_SDIO_OQT_FREE_TXPG_V1 (Offset 0x10250028) */ + +#define BIT_SHIFT_AC_OQT_FREEPG_V1 16 +#define BIT_MASK_AC_OQT_FREEPG_V1 0xff +#define BIT_AC_OQT_FREEPG_V1 (x) \ + (((x) & BIT_MASK_AC_OQT_FREEPG_V1) << BIT_SHIFT_AC_OQT_FREEPG_V1) +#define BITS_AC_OQT_FREEPG_V1 \ + (BIT_MASK_AC_OQT_FREEPG_V1 << BIT_SHIFT_AC_OQT_FREEPG_V1) +#define BIT_CLEAR_AC_OQT_FREEPG_V1 (x) ((x) & (~BITS_AC_OQT_FREEPG_V1)) +#define BIT_GET_AC_OQT_FREEPG_V1 (x) \ + (((x) >> BIT_SHIFT_AC_OQT_FREEPG_V1) & BIT_MASK_AC_OQT_FREEPG_V1) +#define BIT_SET_AC_OQT_FREEPG_V1 (x, v) \ + (BIT_CLEAR_AC_OQT_FREEPG_V1(x) | BIT_AC_OQT_FREEPG_V1(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_EN_SYN BIT(16) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_MCCO 14 +#define BIT_MASK_MCCO 0x3 +#define BIT_MCCO (x) (((x) & BIT_MASK_MCCO) << BIT_SHIFT_MCCO) +#define BITS_MCCO (BIT_MASK_MCCO << BIT_SHIFT_MCCO) +#define BIT_CLEAR_MCCO (x) ((x) & (~BITS_MCCO)) +#define BIT_GET_MCCO (x) (((x) >> BIT_SHIFT_MCCO) & BIT_MASK_MCCO) +#define BIT_SET_MCCO (x, v) (BIT_CLEAR_MCCO(x) | BIT_MCCO(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_REG_LDO_SEL 12 +#define BIT_MASK_REG_LDO_SEL 0x3 +#define BIT_REG_LDO_SEL (x) \ + (((x) & BIT_MASK_REG_LDO_SEL) << BIT_SHIFT_REG_LDO_SEL) +#define BITS_REG_LDO_SEL (BIT_MASK_REG_LDO_SEL << BIT_SHIFT_REG_LDO_SEL) +#define BIT_CLEAR_REG_LDO_SEL (x) ((x) & (~BITS_REG_LDO_SEL)) +#define BIT_GET_REG_LDO_SEL (x) \ + (((x) >> BIT_SHIFT_REG_LDO_SEL) & BIT_MASK_REG_LDO_SEL) +#define BIT_SET_REG_LDO_SEL (x, v) \ + (BIT_CLEAR_REG_LDO_SEL(x) | BIT_REG_LDO_SEL(v)) + +#define BIT_REG_KVCO_V2 BIT(10) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_AGPIO_GPO BIT(9) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_AGPIO_DRV 7 +#define BIT_MASK_AGPIO_DRV 0x3 +#define BIT_AGPIO_DRV (x) (((x) & BIT_MASK_AGPIO_DRV) << BIT_SHIFT_AGPIO_DRV) +#define BITS_AGPIO_DRV (BIT_MASK_AGPIO_DRV << BIT_SHIFT_AGPIO_DRV) +#define BIT_CLEAR_AGPIO_DRV (x) ((x) & (~BITS_AGPIO_DRV)) +#define BIT_GET_AGPIO_DRV (x) (((x) >> BIT_SHIFT_AGPIO_DRV) & BIT_MASK_AGPIO_DRV) +#define BIT_SET_AGPIO_DRV (x, v) (BIT_CLEAR_AGPIO_DRV(x) | BIT_AGPIO_DRV(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_SHIFT_XTAL_CAP_XO 1 +#define BIT_MASK_XTAL_CAP_XO 0x3f +#define BIT_XTAL_CAP_XO (x) \ + (((x) & BIT_MASK_XTAL_CAP_XO) << BIT_SHIFT_XTAL_CAP_XO) +#define BITS_XTAL_CAP_XO (BIT_MASK_XTAL_CAP_XO << BIT_SHIFT_XTAL_CAP_XO) +#define BIT_CLEAR_XTAL_CAP_XO (x) ((x) & (~BITS_XTAL_CAP_XO)) +#define BIT_GET_XTAL_CAP_XO (x) \ + (((x) >> BIT_SHIFT_XTAL_CAP_XO) & BIT_MASK_XTAL_CAP_XO) +#define BIT_SET_XTAL_CAP_XO (x, v) \ + (BIT_CLEAR_XTAL_CAP_XO(x) | BIT_XTAL_CAP_XO(v)) + +/* 2 REG_AFE_CTRL2 (Offset 0x0028) */ + +#define BIT_POW_PLL BIT(0) + +/* 2 REG_SDIO_OQT_FREE_TXPG_V1 (Offset 0x10250028) */ + +#define BIT_SHIFT_EXQ_FREEPG_V1 0 +#define BIT_MASK_EXQ_FREEPG_V1 0xfff +#define BIT_EXQ_FREEPG_V1 (x) \ + (((x) & BIT_MASK_EXQ_FREEPG_V1) << BIT_SHIFT_EXQ_FREEPG_V1) +#define BITS_EXQ_FREEPG_V1 (BIT_MASK_EXQ_FREEPG_V1 << BIT_SHIFT_EXQ_FREEPG_V1) +#define BIT_CLEAR_EXQ_FREEPG_V1 (x) ((x) & (~BITS_EXQ_FREEPG_V1)) +#define BIT_GET_EXQ_FREEPG_V1 (x) \ + (((x) >> BIT_SHIFT_EXQ_FREEPG_V1) & BIT_MASK_EXQ_FREEPG_V1) +#define BIT_SET_EXQ_FREEPG_V1 (x, v) \ + (BIT_CLEAR_EXQ_FREEPG_V1(x) | BIT_EXQ_FREEPG_V1(v)) + +/* 2 REG_AFE_CTRL3 (Offset 0x002C) */ + +#define BIT_SHIFT_PS 7 +#define BIT_MASK_PS 0x7 +#define BIT_PS (x) (((x) & BIT_MASK_PS) << BIT_SHIFT_PS) +#define BITS_PS (BIT_MASK_PS << BIT_SHIFT_PS) +#define BIT_CLEAR_PS (x) ((x) & (~BITS_PS)) +#define BIT_GET_PS (x) (((x) >> BIT_SHIFT_PS) & BIT_MASK_PS) +#define BIT_SET_PS (x, v) (BIT_CLEAR_PS(x) | BIT_PS(v)) + +/* 2 REG_AFE_CTRL3 (Offset 0x002C) */ + +#define BIT_PSEN BIT(6) + +/* 2 REG_AFE_CTRL3 (Offset 0x002C) */ + +#define BIT_DOGENB BIT(5) + +/* 2 REG_AFE_CTRL3 (Offset 0x002C) */ + +#define BIT_REG_MBIAS BIT(4) + +/* 2 REG_AFE_CTRL3 (Offset 0x002C) */ + +#define BIT_SHIFT_REG_R3_V4 1 +#define BIT_MASK_REG_R3_V4 0x7 +#define BIT_REG_R3_V4 (x) (((x) & BIT_MASK_REG_R3_V4) << BIT_SHIFT_REG_R3_V4) +#define BITS_REG_R3_V4 (BIT_MASK_REG_R3_V4 << BIT_SHIFT_REG_R3_V4) +#define BIT_CLEAR_REG_R3_V4 (x) ((x) & (~BITS_REG_R3_V4)) +#define BIT_GET_REG_R3_V4 (x) (((x) >> BIT_SHIFT_REG_R3_V4) & BIT_MASK_REG_R3_V4) +#define BIT_SET_REG_R3_V4 (x, v) (BIT_CLEAR_REG_R3_V4(x) | BIT_REG_R3_V4(v)) + +/* 2 REG_AFE_CTRL3 (Offset 0x002C) */ + +#define BIT_REG_CP_BIT0 BIT(0) + +/* 2 REG_EFUSE_CTRL (Offset 0x0030) */ + +#define BIT_EF_FLAG BIT(31) + +#define BIT_SHIFT_EF_PGPD 28 +#define BIT_MASK_EF_PGPD 0x7 +#define BIT_EF_PGPD (x) (((x) & BIT_MASK_EF_PGPD) << BIT_SHIFT_EF_PGPD) +#define BITS_EF_PGPD (BIT_MASK_EF_PGPD << BIT_SHIFT_EF_PGPD) +#define BIT_CLEAR_EF_PGPD (x) ((x) & (~BITS_EF_PGPD)) +#define BIT_GET_EF_PGPD (x) (((x) >> BIT_SHIFT_EF_PGPD) & BIT_MASK_EF_PGPD) +#define BIT_SET_EF_PGPD (x, v) (BIT_CLEAR_EF_PGPD(x) | BIT_EF_PGPD(v)) + +#define BIT_SHIFT_EF_RDT 24 +#define BIT_MASK_EF_RDT 0xf +#define BIT_EF_RDT (x) (((x) & BIT_MASK_EF_RDT) << BIT_SHIFT_EF_RDT) +#define BITS_EF_RDT (BIT_MASK_EF_RDT << BIT_SHIFT_EF_RDT) +#define BIT_CLEAR_EF_RDT (x) ((x) & (~BITS_EF_RDT)) +#define BIT_GET_EF_RDT (x) (((x) >> BIT_SHIFT_EF_RDT) & BIT_MASK_EF_RDT) +#define BIT_SET_EF_RDT (x, v) (BIT_CLEAR_EF_RDT(x) | BIT_EF_RDT(v)) + +#define BIT_SHIFT_EF_PGTS 20 +#define BIT_MASK_EF_PGTS 0xf +#define BIT_EF_PGTS (x) (((x) & BIT_MASK_EF_PGTS) << BIT_SHIFT_EF_PGTS) +#define BITS_EF_PGTS (BIT_MASK_EF_PGTS << BIT_SHIFT_EF_PGTS) +#define BIT_CLEAR_EF_PGTS (x) ((x) & (~BITS_EF_PGTS)) +#define BIT_GET_EF_PGTS (x) (((x) >> BIT_SHIFT_EF_PGTS) & BIT_MASK_EF_PGTS) +#define BIT_SET_EF_PGTS (x, v) (BIT_CLEAR_EF_PGTS(x) | BIT_EF_PGTS(v)) + +/* 2 REG_EFUSE_CTRL (Offset 0x0030) */ + +#define BIT_EF_PDWN BIT(19) + +/* 2 REG_EFUSE_CTRL (Offset 0x0030) */ + +#define BIT_EF_ALDEN BIT(18) + +/* 2 REG_SDIO_HTSFR_INFO (Offset 0x10250030) */ + +#define BIT_SHIFT_HTSFR1 16 +#define BIT_MASK_HTSFR1 0xffff +#define BIT_HTSFR1 (x) (((x) & BIT_MASK_HTSFR1) << BIT_SHIFT_HTSFR1) +#define BITS_HTSFR1 (BIT_MASK_HTSFR1 << BIT_SHIFT_HTSFR1) +#define BIT_CLEAR_HTSFR1 (x) ((x) & (~BITS_HTSFR1)) +#define BIT_GET_HTSFR1 (x) (((x) >> BIT_SHIFT_HTSFR1) & BIT_MASK_HTSFR1) +#define BIT_SET_HTSFR1 (x, v) (BIT_CLEAR_HTSFR1(x) | BIT_HTSFR1(v)) + +/* 2 REG_EFUSE_CTRL (Offset 0x0030) */ + +#define BIT_SHIFT_EF_ADDR 8 +#define BIT_MASK_EF_ADDR 0x3ff +#define BIT_EF_ADDR (x) (((x) & BIT_MASK_EF_ADDR) << BIT_SHIFT_EF_ADDR) +#define BITS_EF_ADDR (BIT_MASK_EF_ADDR << BIT_SHIFT_EF_ADDR) +#define BIT_CLEAR_EF_ADDR (x) ((x) & (~BITS_EF_ADDR)) +#define BIT_GET_EF_ADDR (x) (((x) >> BIT_SHIFT_EF_ADDR) & BIT_MASK_EF_ADDR) +#define BIT_SET_EF_ADDR (x, v) (BIT_CLEAR_EF_ADDR(x) | BIT_EF_ADDR(v)) + +#define BIT_SHIFT_EF_DATA 0 +#define BIT_MASK_EF_DATA 0xff +#define BIT_EF_DATA (x) (((x) & BIT_MASK_EF_DATA) << BIT_SHIFT_EF_DATA) +#define BITS_EF_DATA (BIT_MASK_EF_DATA << BIT_SHIFT_EF_DATA) +#define BIT_CLEAR_EF_DATA (x) ((x) & (~BITS_EF_DATA)) +#define BIT_GET_EF_DATA (x) (((x) >> BIT_SHIFT_EF_DATA) & BIT_MASK_EF_DATA) +#define BIT_SET_EF_DATA (x, v) (BIT_CLEAR_EF_DATA(x) | BIT_EF_DATA(v)) + +/* 2 REG_SDIO_HTSFR_INFO (Offset 0x10250030) */ + +#define BIT_SHIFT_HTSFR0 0 +#define BIT_MASK_HTSFR0 0xffff +#define BIT_HTSFR0 (x) (((x) & BIT_MASK_HTSFR0) << BIT_SHIFT_HTSFR0) +#define BITS_HTSFR0 (BIT_MASK_HTSFR0 << BIT_SHIFT_HTSFR0) +#define BIT_CLEAR_HTSFR0 (x) ((x) & (~BITS_HTSFR0)) +#define BIT_GET_HTSFR0 (x) (((x) >> BIT_SHIFT_HTSFR0) & BIT_MASK_HTSFR0) +#define BIT_SET_HTSFR0 (x, v) (BIT_CLEAR_HTSFR0(x) | BIT_HTSFR0(v)) + +/* 2 REG_LDO_EFUSE_CTRL (Offset 0x0034) */ + +#define BIT_LDOE25_EN BIT(31) + +/* 2 REG_LDO_EFUSE_CTRL (Offset 0x0034) */ + +#define BIT_SHIFT_LDOE25_V12ADJ_L 27 +#define BIT_MASK_LDOE25_V12ADJ_L 0xf +#define BIT_LDOE25_V12ADJ_L (x) \ + (((x) & BIT_MASK_LDOE25_V12ADJ_L) << BIT_SHIFT_LDOE25_V12ADJ_L) +#define BITS_LDOE25_V12ADJ_L \ + (BIT_MASK_LDOE25_V12ADJ_L << BIT_SHIFT_LDOE25_V12ADJ_L) +#define BIT_CLEAR_LDOE25_V12ADJ_L (x) ((x) & (~BITS_LDOE25_V12ADJ_L)) +#define BIT_GET_LDOE25_V12ADJ_L (x) \ + (((x) >> BIT_SHIFT_LDOE25_V12ADJ_L) & BIT_MASK_LDOE25_V12ADJ_L) +#define BIT_SET_LDOE25_V12ADJ_L (x, v) \ + (BIT_CLEAR_LDOE25_V12ADJ_L(x) | BIT_LDOE25_V12ADJ_L(v)) + +/* 2 REG_LDO_EFUSE_CTRL (Offset 0x0034) */ + +#define BIT_EF_CRES_SEL BIT(26) + +/* 2 REG_LDO_EFUSE_CTRL (Offset 0x0034) */ + +#define BIT_SHIFT_EF_SCAN_START_V1 16 +#define BIT_MASK_EF_SCAN_START_V1 0x3ff +#define BIT_EF_SCAN_START_V1 (x) \ + (((x) & BIT_MASK_EF_SCAN_START_V1) << BIT_SHIFT_EF_SCAN_START_V1) +#define BITS_EF_SCAN_START_V1 \ + (BIT_MASK_EF_SCAN_START_V1 << BIT_SHIFT_EF_SCAN_START_V1) +#define BIT_CLEAR_EF_SCAN_START_V1 (x) ((x) & (~BITS_EF_SCAN_START_V1)) +#define BIT_GET_EF_SCAN_START_V1 (x) \ + (((x) >> BIT_SHIFT_EF_SCAN_START_V1) & BIT_MASK_EF_SCAN_START_V1) +#define BIT_SET_EF_SCAN_START_V1 (x, v) \ + (BIT_CLEAR_EF_SCAN_START_V1(x) | BIT_EF_SCAN_START_V1(v)) + +/* 2 REG_LDO_EFUSE_CTRL (Offset 0x0034) */ + +#define BIT_SHIFT_EF_SCAN_END 12 +#define BIT_MASK_EF_SCAN_END 0xf +#define BIT_EF_SCAN_END (x) \ + (((x) & BIT_MASK_EF_SCAN_END) << BIT_SHIFT_EF_SCAN_END) +#define BITS_EF_SCAN_END (BIT_MASK_EF_SCAN_END << BIT_SHIFT_EF_SCAN_END) +#define BIT_CLEAR_EF_SCAN_END (x) ((x) & (~BITS_EF_SCAN_END)) +#define BIT_GET_EF_SCAN_END (x) \ + (((x) >> BIT_SHIFT_EF_SCAN_END) & BIT_MASK_EF_SCAN_END) +#define BIT_SET_EF_SCAN_END (x, v) \ + (BIT_CLEAR_EF_SCAN_END(x) | BIT_EF_SCAN_END(v)) + +/* 2 REG_LDO_EFUSE_CTRL (Offset 0x0034) */ + +#define BIT_EF_PD_DIS BIT(11) + +/* 2 REG_LDO_EFUSE_CTRL (Offset 0x0034) */ + +#define BIT_SHIFT_EF_CELL_SEL 8 +#define BIT_MASK_EF_CELL_SEL 0x3 +#define BIT_EF_CELL_SEL (x) \ + (((x) & BIT_MASK_EF_CELL_SEL) << BIT_SHIFT_EF_CELL_SEL) +#define BITS_EF_CELL_SEL (BIT_MASK_EF_CELL_SEL << BIT_SHIFT_EF_CELL_SEL) +#define BIT_CLEAR_EF_CELL_SEL (x) ((x) & (~BITS_EF_CELL_SEL)) +#define BIT_GET_EF_CELL_SEL (x) \ + (((x) >> BIT_SHIFT_EF_CELL_SEL) & BIT_MASK_EF_CELL_SEL) +#define BIT_SET_EF_CELL_SEL (x, v) \ + (BIT_CLEAR_EF_CELL_SEL(x) | BIT_EF_CELL_SEL(v)) + +/* 2 REG_LDO_EFUSE_CTRL (Offset 0x0034) */ + +#define BIT_EF_TRPT BIT(7) + +#define BIT_SHIFT_EF_TTHD 0 +#define BIT_MASK_EF_TTHD 0x7f +#define BIT_EF_TTHD (x) (((x) & BIT_MASK_EF_TTHD) << BIT_SHIFT_EF_TTHD) +#define BITS_EF_TTHD (BIT_MASK_EF_TTHD << BIT_SHIFT_EF_TTHD) +#define BIT_CLEAR_EF_TTHD (x) ((x) & (~BITS_EF_TTHD)) +#define BIT_GET_EF_TTHD (x) (((x) >> BIT_SHIFT_EF_TTHD) & BIT_MASK_EF_TTHD) +#define BIT_SET_EF_TTHD (x, v) (BIT_CLEAR_EF_TTHD(x) | BIT_EF_TTHD(v)) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SHIFT_DBG_SEL_V1 16 +#define BIT_MASK_DBG_SEL_V1 0xff +#define BIT_DBG_SEL_V1 (x) (((x) & BIT_MASK_DBG_SEL_V1) << BIT_SHIFT_DBG_SEL_V1) +#define BITS_DBG_SEL_V1 (BIT_MASK_DBG_SEL_V1 << BIT_SHIFT_DBG_SEL_V1) +#define BIT_CLEAR_DBG_SEL_V1 (x) ((x) & (~BITS_DBG_SEL_V1)) +#define BIT_GET_DBG_SEL_V1 (x) \ + (((x) >> BIT_SHIFT_DBG_SEL_V1) & BIT_MASK_DBG_SEL_V1) +#define BIT_SET_DBG_SEL_V1 (x, v) (BIT_CLEAR_DBG_SEL_V1(x) | BIT_DBG_SEL_V1(v)) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SHIFT_DBG_SEL_BYTE 14 +#define BIT_MASK_DBG_SEL_BYTE 0x3 +#define BIT_DBG_SEL_BYTE (x) \ + (((x) & BIT_MASK_DBG_SEL_BYTE) << BIT_SHIFT_DBG_SEL_BYTE) +#define BITS_DBG_SEL_BYTE (BIT_MASK_DBG_SEL_BYTE << BIT_SHIFT_DBG_SEL_BYTE) +#define BIT_CLEAR_DBG_SEL_BYTE (x) ((x) & (~BITS_DBG_SEL_BYTE)) +#define BIT_GET_DBG_SEL_BYTE (x) \ + (((x) >> BIT_SHIFT_DBG_SEL_BYTE) & BIT_MASK_DBG_SEL_BYTE) +#define BIT_SET_DBG_SEL_BYTE (x, v) \ + (BIT_CLEAR_DBG_SEL_BYTE(x) | BIT_DBG_SEL_BYTE(v)) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SHIFT_STD_L1_V1 12 +#define BIT_MASK_STD_L1_V1 0x3 +#define BIT_STD_L1_V1 (x) (((x) & BIT_MASK_STD_L1_V1) << BIT_SHIFT_STD_L1_V1) +#define BITS_STD_L1_V1 (BIT_MASK_STD_L1_V1 << BIT_SHIFT_STD_L1_V1) +#define BIT_CLEAR_STD_L1_V1 (x) ((x) & (~BITS_STD_L1_V1)) +#define BIT_GET_STD_L1_V1 (x) (((x) >> BIT_SHIFT_STD_L1_V1) & BIT_MASK_STD_L1_V1) +#define BIT_SET_STD_L1_V1 (x, v) (BIT_CLEAR_STD_L1_V1(x) | BIT_STD_L1_V1(v)) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SYSON_DBG_PAD_E2 BIT(11) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SYSON_LED_PAD_E2 BIT(10) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SYSON_GPEE_PAD_E2 BIT(9) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SYSON_PCI_PAD_E2 BIT(8) + +#define BIT_SHIFT_MATCH_CNT 8 +#define BIT_MASK_MATCH_CNT 0xff +#define BIT_MATCH_CNT (x) (((x) & BIT_MASK_MATCH_CNT) << BIT_SHIFT_MATCH_CNT) +#define BITS_MATCH_CNT (BIT_MASK_MATCH_CNT << BIT_SHIFT_MATCH_CNT) +#define BIT_CLEAR_MATCH_CNT (x) ((x) & (~BITS_MATCH_CNT)) +#define BIT_GET_MATCH_CNT (x) (((x) >> BIT_SHIFT_MATCH_CNT) & BIT_MASK_MATCH_CNT) +#define BIT_SET_MATCH_CNT (x, v) (BIT_CLEAR_MATCH_CNT(x) | BIT_MATCH_CNT(v)) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_AUTO_SW_LDO_VOL_EN BIT(7) + +/* 2 REG_SDIO_HCPWM1_V2 (Offset 0x10250038) */ + +#define BIT_TOGGLE BIT(7) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SHIFT_SYSON_SPS0WWV_WT 4 +#define BIT_MASK_SYSON_SPS0WWV_WT 0x3 +#define BIT_SYSON_SPS0WWV_WT (x) \ + (((x) & BIT_MASK_SYSON_SPS0WWV_WT) << BIT_SHIFT_SYSON_SPS0WWV_WT) +#define BITS_SYSON_SPS0WWV_WT \ + (BIT_MASK_SYSON_SPS0WWV_WT << BIT_SHIFT_SYSON_SPS0WWV_WT) +#define BIT_CLEAR_SYSON_SPS0WWV_WT (x) ((x) & (~BITS_SYSON_SPS0WWV_WT)) +#define BIT_GET_SYSON_SPS0WWV_WT (x) \ + (((x) >> BIT_SHIFT_SYSON_SPS0WWV_WT) & BIT_MASK_SYSON_SPS0WWV_WT) +#define BIT_SET_SYSON_SPS0WWV_WT (x, v) \ + (BIT_CLEAR_SYSON_SPS0WWV_WT(x) | BIT_SYSON_SPS0WWV_WT(v)) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SHIFT_SYSON_SPS0LDO_WT 2 +#define BIT_MASK_SYSON_SPS0LDO_WT 0x3 +#define BIT_SYSON_SPS0LDO_WT (x) \ + (((x) & BIT_MASK_SYSON_SPS0LDO_WT) << BIT_SHIFT_SYSON_SPS0LDO_WT) +#define BITS_SYSON_SPS0LDO_WT \ + (BIT_MASK_SYSON_SPS0LDO_WT << BIT_SHIFT_SYSON_SPS0LDO_WT) +#define BIT_CLEAR_SYSON_SPS0LDO_WT (x) ((x) & (~BITS_SYSON_SPS0LDO_WT)) +#define BIT_GET_SYSON_SPS0LDO_WT (x) \ + (((x) >> BIT_SHIFT_SYSON_SPS0LDO_WT) & BIT_MASK_SYSON_SPS0LDO_WT) +#define BIT_SET_SYSON_SPS0LDO_WT (x, v) \ + (BIT_CLEAR_SYSON_SPS0LDO_WT(x) | BIT_SYSON_SPS0LDO_WT(v)) + +/* 2 REG_PWR_OPTION_CTRL (Offset 0x0038) */ + +#define BIT_SHIFT_SYSON_RCLK_SCALE 0 +#define BIT_MASK_SYSON_RCLK_SCALE 0x3 +#define BIT_SYSON_RCLK_SCALE (x) \ + (((x) & BIT_MASK_SYSON_RCLK_SCALE) << BIT_SHIFT_SYSON_RCLK_SCALE) +#define BITS_SYSON_RCLK_SCALE \ + (BIT_MASK_SYSON_RCLK_SCALE << BIT_SHIFT_SYSON_RCLK_SCALE) +#define BIT_CLEAR_SYSON_RCLK_SCALE (x) ((x) & (~BITS_SYSON_RCLK_SCALE)) +#define BIT_GET_SYSON_RCLK_SCALE (x) \ + (((x) >> BIT_SHIFT_SYSON_RCLK_SCALE) & BIT_MASK_SYSON_RCLK_SCALE) +#define BIT_SET_SYSON_RCLK_SCALE (x, v) \ + (BIT_CLEAR_SYSON_RCLK_SCALE(x) | BIT_SYSON_RCLK_SCALE(v)) + +/* 2 REG_SDIO_HCPWM1_V2 (Offset 0x10250038) */ + +#define BIT_CUR_PS BIT(0) + +/* 2 REG_CAL_TIMER (Offset 0x003C) */ + +#define BIT_SHIFT_CAL_SCAL 0 +#define BIT_MASK_CAL_SCAL 0xff +#define BIT_CAL_SCAL (x) (((x) & BIT_MASK_CAL_SCAL) << BIT_SHIFT_CAL_SCAL) +#define BITS_CAL_SCAL (BIT_MASK_CAL_SCAL << BIT_SHIFT_CAL_SCAL) +#define BIT_CLEAR_CAL_SCAL (x) ((x) & (~BITS_CAL_SCAL)) +#define BIT_GET_CAL_SCAL (x) (((x) >> BIT_SHIFT_CAL_SCAL) & BIT_MASK_CAL_SCAL) +#define BIT_SET_CAL_SCAL (x, v) (BIT_CLEAR_CAL_SCAL(x) | BIT_CAL_SCAL(v)) + +/* 2 REG_ACLK_MON (Offset 0x003E) */ + +#define BIT_SHIFT_RCLK_MON 5 +#define BIT_MASK_RCLK_MON 0x7ff +#define BIT_RCLK_MON (x) (((x) & BIT_MASK_RCLK_MON) << BIT_SHIFT_RCLK_MON) +#define BITS_RCLK_MON (BIT_MASK_RCLK_MON << BIT_SHIFT_RCLK_MON) +#define BIT_CLEAR_RCLK_MON (x) ((x) & (~BITS_RCLK_MON)) +#define BIT_GET_RCLK_MON (x) (((x) >> BIT_SHIFT_RCLK_MON) & BIT_MASK_RCLK_MON) +#define BIT_SET_RCLK_MON (x, v) (BIT_CLEAR_RCLK_MON(x) | BIT_RCLK_MON(v)) + +#define BIT_CAL_EN BIT(4) + +#define BIT_SHIFT_DPSTU 2 +#define BIT_MASK_DPSTU 0x3 +#define BIT_DPSTU (x) (((x) & BIT_MASK_DPSTU) << BIT_SHIFT_DPSTU) +#define BITS_DPSTU (BIT_MASK_DPSTU << BIT_SHIFT_DPSTU) +#define BIT_CLEAR_DPSTU (x) ((x) & (~BITS_DPSTU)) +#define BIT_GET_DPSTU (x) (((x) >> BIT_SHIFT_DPSTU) & BIT_MASK_DPSTU) +#define BIT_SET_DPSTU (x, v) (BIT_CLEAR_DPSTU(x) | BIT_DPSTU(v)) + +#define BIT_SUS_16X BIT(1) + +/* 2 REG_SDIO_INDIRECT_REG_CFG (Offset 0x10250040) */ + +#define BIT_INDIRECT_REG_RDY BIT(20) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_FSPI_EN BIT(19) + +/* 2 REG_SDIO_INDIRECT_REG_CFG (Offset 0x10250040) */ + +#define BIT_INDIRECT_REG_R BIT(19) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_WL_RTS_EXT_32K_SEL BIT(18) + +/* 2 REG_SDIO_INDIRECT_REG_CFG (Offset 0x10250040) */ + +#define BIT_INDIRECT_REG_W BIT(18) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_WLGP_SPI_EN BIT(16) + +/* 2 REG_SDIO_INDIRECT_REG_CFG (Offset 0x10250040) */ + +#define BIT_SHIFT_INDIRECT_REG_SIZE 16 +#define BIT_MASK_INDIRECT_REG_SIZE 0x3 +#define BIT_INDIRECT_REG_SIZE (x) \ + (((x) & BIT_MASK_INDIRECT_REG_SIZE) << BIT_SHIFT_INDIRECT_REG_SIZE) +#define BITS_INDIRECT_REG_SIZE \ + (BIT_MASK_INDIRECT_REG_SIZE << BIT_SHIFT_INDIRECT_REG_SIZE) +#define BIT_CLEAR_INDIRECT_REG_SIZE (x) ((x) & (~BITS_INDIRECT_REG_SIZE)) +#define BIT_GET_INDIRECT_REG_SIZE (x) \ + (((x) >> BIT_SHIFT_INDIRECT_REG_SIZE) & BIT_MASK_INDIRECT_REG_SIZE) +#define BIT_SET_INDIRECT_REG_SIZE (x, v) \ + (BIT_CLEAR_INDIRECT_REG_SIZE(x) | BIT_INDIRECT_REG_SIZE(v)) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_SIC_LBK BIT(15) +#define BIT_ENHTP BIT(14) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_ENSIC BIT(12) +#define BIT_SIC_SWRST BIT(11) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_PO_WIFI_PTA_PINS BIT(10) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_PO_BT_PTA_PINS BIT(9) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_ENUART BIT(8) + +#define BIT_SHIFT_BTMODE 6 +#define BIT_MASK_BTMODE 0x3 +#define BIT_BTMODE (x) (((x) & BIT_MASK_BTMODE) << BIT_SHIFT_BTMODE) +#define BITS_BTMODE (BIT_MASK_BTMODE << BIT_SHIFT_BTMODE) +#define BIT_CLEAR_BTMODE (x) ((x) & (~BITS_BTMODE)) +#define BIT_GET_BTMODE (x) (((x) >> BIT_SHIFT_BTMODE) & BIT_MASK_BTMODE) +#define BIT_SET_BTMODE (x, v) (BIT_CLEAR_BTMODE(x) | BIT_BTMODE(v)) + +#define BIT_ENBT BIT(5) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_GEN1GEN2_SWITCH BIT(5) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_EROM_EN BIT(4) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_WLRFE_6_7_EN BIT(3) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_WLRFE_4_5_EN BIT(2) + +/* 2 REG_GPIO_MUXCFG (Offset 0x0040) */ + +#define BIT_SHIFT_GPIOSEL 0 +#define BIT_MASK_GPIOSEL 0x3 +#define BIT_GPIOSEL (x) (((x) & BIT_MASK_GPIOSEL) << BIT_SHIFT_GPIOSEL) +#define BITS_GPIOSEL (BIT_MASK_GPIOSEL << BIT_SHIFT_GPIOSEL) +#define BIT_CLEAR_GPIOSEL (x) ((x) & (~BITS_GPIOSEL)) +#define BIT_GET_GPIOSEL (x) (((x) >> BIT_SHIFT_GPIOSEL) & BIT_MASK_GPIOSEL) +#define BIT_SET_GPIOSEL (x, v) (BIT_CLEAR_GPIOSEL(x) | BIT_GPIOSEL(v)) + +/* 2 REG_SDIO_INDIRECT_REG_CFG (Offset 0x10250040) */ + +#define BIT_SHIFT_INDIRECT_REG_ADDR 0 +#define BIT_MASK_INDIRECT_REG_ADDR 0xffff +#define BIT_INDIRECT_REG_ADDR (x) \ + (((x) & BIT_MASK_INDIRECT_REG_ADDR) << BIT_SHIFT_INDIRECT_REG_ADDR) +#define BITS_INDIRECT_REG_ADDR \ + (BIT_MASK_INDIRECT_REG_ADDR << BIT_SHIFT_INDIRECT_REG_ADDR) +#define BIT_CLEAR_INDIRECT_REG_ADDR (x) ((x) & (~BITS_INDIRECT_REG_ADDR)) +#define BIT_GET_INDIRECT_REG_ADDR (x) \ + (((x) >> BIT_SHIFT_INDIRECT_REG_ADDR) & BIT_MASK_INDIRECT_REG_ADDR) +#define BIT_SET_INDIRECT_REG_ADDR (x, v) \ + (BIT_CLEAR_INDIRECT_REG_ADDR(x) | BIT_INDIRECT_REG_ADDR(v)) + +/* 2 REG_GPIO_PIN_CTRL (Offset 0x0044) */ + +#define BIT_SHIFT_GPIO_MOD_7_TO_0 24 +#define BIT_MASK_GPIO_MOD_7_TO_0 0xff +#define BIT_GPIO_MOD_7_TO_0 (x) \ + (((x) & BIT_MASK_GPIO_MOD_7_TO_0) << BIT_SHIFT_GPIO_MOD_7_TO_0) +#define BITS_GPIO_MOD_7_TO_0 \ + (BIT_MASK_GPIO_MOD_7_TO_0 << BIT_SHIFT_GPIO_MOD_7_TO_0) +#define BIT_CLEAR_GPIO_MOD_7_TO_0 (x) ((x) & (~BITS_GPIO_MOD_7_TO_0)) +#define BIT_GET_GPIO_MOD_7_TO_0 (x) \ + (((x) >> BIT_SHIFT_GPIO_MOD_7_TO_0) & BIT_MASK_GPIO_MOD_7_TO_0) +#define BIT_SET_GPIO_MOD_7_TO_0 (x, v) \ + (BIT_CLEAR_GPIO_MOD_7_TO_0(x) | BIT_GPIO_MOD_7_TO_0(v)) + +#define BIT_SHIFT_GPIO_IO_SEL_7_TO_0 16 +#define BIT_MASK_GPIO_IO_SEL_7_TO_0 0xff +#define BIT_GPIO_IO_SEL_7_TO_0 (x) \ + (((x) & BIT_MASK_GPIO_IO_SEL_7_TO_0) << BIT_SHIFT_GPIO_IO_SEL_7_TO_0) +#define BITS_GPIO_IO_SEL_7_TO_0 \ + (BIT_MASK_GPIO_IO_SEL_7_TO_0 << BIT_SHIFT_GPIO_IO_SEL_7_TO_0) +#define BIT_CLEAR_GPIO_IO_SEL_7_TO_0 (x) ((x) & (~BITS_GPIO_IO_SEL_7_TO_0)) +#define BIT_GET_GPIO_IO_SEL_7_TO_0 (x) \ + (((x) >> BIT_SHIFT_GPIO_IO_SEL_7_TO_0) & BIT_MASK_GPIO_IO_SEL_7_TO_0) +#define BIT_SET_GPIO_IO_SEL_7_TO_0 (x, v) \ + (BIT_CLEAR_GPIO_IO_SEL_7_TO_0(x) | BIT_GPIO_IO_SEL_7_TO_0(v)) + +#define BIT_SHIFT_GPIO_OUT_7_TO_0 8 +#define BIT_MASK_GPIO_OUT_7_TO_0 0xff +#define BIT_GPIO_OUT_7_TO_0 (x) \ + (((x) & BIT_MASK_GPIO_OUT_7_TO_0) << BIT_SHIFT_GPIO_OUT_7_TO_0) +#define BITS_GPIO_OUT_7_TO_0 \ + (BIT_MASK_GPIO_OUT_7_TO_0 << BIT_SHIFT_GPIO_OUT_7_TO_0) +#define BIT_CLEAR_GPIO_OUT_7_TO_0 (x) ((x) & (~BITS_GPIO_OUT_7_TO_0)) +#define BIT_GET_GPIO_OUT_7_TO_0 (x) \ + (((x) >> BIT_SHIFT_GPIO_OUT_7_TO_0) & BIT_MASK_GPIO_OUT_7_TO_0) +#define BIT_SET_GPIO_OUT_7_TO_0 (x, v) \ + (BIT_CLEAR_GPIO_OUT_7_TO_0(x) | BIT_GPIO_OUT_7_TO_0(v)) + +#define BIT_SHIFT_GPIO_IN_7_TO_0 0 +#define BIT_MASK_GPIO_IN_7_TO_0 0xff +#define BIT_GPIO_IN_7_TO_0 (x) \ + (((x) & BIT_MASK_GPIO_IN_7_TO_0) << BIT_SHIFT_GPIO_IN_7_TO_0) +#define BITS_GPIO_IN_7_TO_0 \ + (BIT_MASK_GPIO_IN_7_TO_0 << BIT_SHIFT_GPIO_IN_7_TO_0) +#define BIT_CLEAR_GPIO_IN_7_TO_0 (x) ((x) & (~BITS_GPIO_IN_7_TO_0)) +#define BIT_GET_GPIO_IN_7_TO_0 (x) \ + (((x) >> BIT_SHIFT_GPIO_IN_7_TO_0) & BIT_MASK_GPIO_IN_7_TO_0) +#define BIT_SET_GPIO_IN_7_TO_0 (x, v) \ + (BIT_CLEAR_GPIO_IN_7_TO_0(x) | BIT_GPIO_IN_7_TO_0(v)) + +/* 2 REG_SDIO_INDIRECT_REG_DATA (Offset 0x10250044) */ + +#define BIT_SHIFT_INDIRECT_REG_DATA 0 +#define BIT_MASK_INDIRECT_REG_DATA 0xffffffffL +#define BIT_INDIRECT_REG_DATA (x) \ + (((x) & BIT_MASK_INDIRECT_REG_DATA) << BIT_SHIFT_INDIRECT_REG_DATA) +#define BITS_INDIRECT_REG_DATA \ + (BIT_MASK_INDIRECT_REG_DATA << BIT_SHIFT_INDIRECT_REG_DATA) +#define BIT_CLEAR_INDIRECT_REG_DATA (x) ((x) & (~BITS_INDIRECT_REG_DATA)) +#define BIT_GET_INDIRECT_REG_DATA (x) \ + (((x) >> BIT_SHIFT_INDIRECT_REG_DATA) & BIT_MASK_INDIRECT_REG_DATA) +#define BIT_SET_INDIRECT_REG_DATA (x, v) \ + (BIT_CLEAR_INDIRECT_REG_DATA(x) | BIT_INDIRECT_REG_DATA(v)) + +/* 2 REG_GPIO_INTM (Offset 0x0048) */ + +#define BIT_SHIFT_MUXDBG_SEL 30 +#define BIT_MASK_MUXDBG_SEL 0x3 +#define BIT_MUXDBG_SEL (x) (((x) & BIT_MASK_MUXDBG_SEL) << BIT_SHIFT_MUXDBG_SEL) +#define BITS_MUXDBG_SEL (BIT_MASK_MUXDBG_SEL << BIT_SHIFT_MUXDBG_SEL) +#define BIT_CLEAR_MUXDBG_SEL (x) ((x) & (~BITS_MUXDBG_SEL)) +#define BIT_GET_MUXDBG_SEL (x) \ + (((x) >> BIT_SHIFT_MUXDBG_SEL) & BIT_MASK_MUXDBG_SEL) +#define BIT_SET_MUXDBG_SEL (x, v) (BIT_CLEAR_MUXDBG_SEL(x) | BIT_MUXDBG_SEL(v)) + +/* 2 REG_GPIO_INTM (Offset 0x0048) */ + +#define BIT_EXTWOL_SEL BIT(17) + +/* 2 REG_GPIO_INTM (Offset 0x0048) */ + +#define BIT_EXTWOL_EN BIT(16) + +/* 2 REG_GPIO_INTM (Offset 0x0048) */ + +#define BIT_GPIOF_INT_MD BIT(15) +#define BIT_GPIOE_INT_MD BIT(14) +#define BIT_GPIOD_INT_MD BIT(13) +#define BIT_GPIOC_INT_MD BIT(12) +#define BIT_GPIOB_INT_MD BIT(11) +#define BIT_GPIOA_INT_MD BIT(10) +#define BIT_GPIO9_INT_MD BIT(9) +#define BIT_GPIO8_INT_MD BIT(8) +#define BIT_GPIO7_INT_MD BIT(7) +#define BIT_GPIO6_INT_MD BIT(6) +#define BIT_GPIO5_INT_MD BIT(5) +#define BIT_GPIO4_INT_MD BIT(4) +#define BIT_GPIO3_INT_MD BIT(3) +#define BIT_GPIO2_INT_MD BIT(2) +#define BIT_GPIO1_INT_MD BIT(1) +#define BIT_GPIO0_INT_MD BIT(0) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_GPIO3_WL_CTRL_EN BIT(27) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_LNAON_SEL_EN BIT(26) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_PAPE_SEL_EN BIT(25) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_DPDT_WLBT_SEL BIT(24) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_DPDT_SEL_EN BIT(23) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_GPIO13_14_WL_CTRL_EN BIT(22) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_LED2DIS BIT(21) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_LED2PL BIT(20) +#define BIT_LED2SV BIT(19) + +#define BIT_SHIFT_LED2CM 16 +#define BIT_MASK_LED2CM 0x7 +#define BIT_LED2CM (x) (((x) & BIT_MASK_LED2CM) << BIT_SHIFT_LED2CM) +#define BITS_LED2CM (BIT_MASK_LED2CM << BIT_SHIFT_LED2CM) +#define BIT_CLEAR_LED2CM (x) ((x) & (~BITS_LED2CM)) +#define BIT_GET_LED2CM (x) (((x) >> BIT_SHIFT_LED2CM) & BIT_MASK_LED2CM) +#define BIT_SET_LED2CM (x, v) (BIT_CLEAR_LED2CM(x) | BIT_LED2CM(v)) + +#define BIT_LED1DIS BIT(15) +#define BIT_LED1PL BIT(12) +#define BIT_LED1SV BIT(11) + +#define BIT_SHIFT_LED1CM 8 +#define BIT_MASK_LED1CM 0x7 +#define BIT_LED1CM (x) (((x) & BIT_MASK_LED1CM) << BIT_SHIFT_LED1CM) +#define BITS_LED1CM (BIT_MASK_LED1CM << BIT_SHIFT_LED1CM) +#define BIT_CLEAR_LED1CM (x) ((x) & (~BITS_LED1CM)) +#define BIT_GET_LED1CM (x) (((x) >> BIT_SHIFT_LED1CM) & BIT_MASK_LED1CM) +#define BIT_SET_LED1CM (x, v) (BIT_CLEAR_LED1CM(x) | BIT_LED1CM(v)) + +#define BIT_LED0DIS BIT(7) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_SHIFT_AFE_LDO_SWR_CHECK 5 +#define BIT_MASK_AFE_LDO_SWR_CHECK 0x3 +#define BIT_AFE_LDO_SWR_CHECK (x) \ + (((x) & BIT_MASK_AFE_LDO_SWR_CHECK) << BIT_SHIFT_AFE_LDO_SWR_CHECK) +#define BITS_AFE_LDO_SWR_CHECK \ + (BIT_MASK_AFE_LDO_SWR_CHECK << BIT_SHIFT_AFE_LDO_SWR_CHECK) +#define BIT_CLEAR_AFE_LDO_SWR_CHECK (x) ((x) & (~BITS_AFE_LDO_SWR_CHECK)) +#define BIT_GET_AFE_LDO_SWR_CHECK (x) \ + (((x) >> BIT_SHIFT_AFE_LDO_SWR_CHECK) & BIT_MASK_AFE_LDO_SWR_CHECK) +#define BIT_SET_AFE_LDO_SWR_CHECK (x, v) \ + (BIT_CLEAR_AFE_LDO_SWR_CHECK(x) | BIT_AFE_LDO_SWR_CHECK(v)) + +/* 2 REG_LED_CFG (Offset 0x004C) */ + +#define BIT_LED0PL BIT(4) +#define BIT_LED0SV BIT(3) + +#define BIT_SHIFT_LED0CM 0 +#define BIT_MASK_LED0CM 0x7 +#define BIT_LED0CM (x) (((x) & BIT_MASK_LED0CM) << BIT_SHIFT_LED0CM) +#define BITS_LED0CM (BIT_MASK_LED0CM << BIT_SHIFT_LED0CM) +#define BIT_CLEAR_LED0CM (x) ((x) & (~BITS_LED0CM)) +#define BIT_GET_LED0CM (x) (((x) >> BIT_SHIFT_LED0CM) & BIT_MASK_LED0CM) +#define BIT_SET_LED0CM (x, v) (BIT_CLEAR_LED0CM(x) | BIT_LED0CM(v)) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_PDNINT_EN BIT(31) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_NFC_INT_PAD_EN BIT(30) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_SPS_OCP_INT_EN BIT(29) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_PWMERR_INT_EN BIT(28) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIOF_INT_EN BIT(27) +#define BIT_FS_GPIOE_INT_EN BIT(26) +#define BIT_FS_GPIOD_INT_EN BIT(25) +#define BIT_FS_GPIOC_INT_EN BIT(24) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIOB_INT_EN BIT(23) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIOA_INT_EN BIT(22) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO9_INT_EN BIT(21) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO8_INT_EN BIT(20) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO7_INT_EN BIT(19) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO6_INT_EN BIT(18) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO5_INT_EN BIT(17) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO4_INT_EN BIT(16) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO3_INT_EN BIT(15) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO2_INT_EN BIT(14) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO1_INT_EN BIT(13) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_GPIO0_INT_EN BIT(12) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_HCI_SUS_EN BIT(11) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_HCI_RES_EN BIT(10) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_HCI_RESET_EN BIT(9) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_BTON_STS_UPDATE_MSK_EN BIT(7) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_ACT2RECOVERY_INT_EN_V1 BIT(6) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_HCI_TXDMA_REQ_HIMR BIT(4) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_32K_LEAVE_SETTING_MAK BIT(3) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_32K_ENTER_SETTING_MAK BIT(2) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_USB_LPMRSM_MSK BIT(1) + +/* 2 REG_FSIMR (Offset 0x0050) */ + +#define BIT_FS_USB_LPMINT_MSK BIT(0) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_PDNINT BIT(31) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_SPS_OCP_INT BIT(29) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_PWMERR_INT BIT(28) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIOF_INT BIT(27) +#define BIT_FS_GPIOE_INT BIT(26) +#define BIT_FS_GPIOD_INT BIT(25) +#define BIT_FS_GPIOC_INT BIT(24) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIOB_INT BIT(23) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIOA_INT BIT(22) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO9_INT BIT(21) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO8_INT BIT(20) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO7_INT BIT(19) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO6_INT BIT(18) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO5_INT BIT(17) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO4_INT BIT(16) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO3_INT BIT(15) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO2_INT BIT(14) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO1_INT BIT(13) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_GPIO0_INT BIT(12) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_HCI_SUS_INT BIT(11) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_HCI_RES_INT BIT(10) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_HCI_RESET_INT BIT(9) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_ACT2RECOVERY BIT(6) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_HCI_TXDMA_REQ_HISR BIT(4) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_32K_LEAVE_SETTING_INT BIT(3) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_32K_ENTER_SETTING_INT BIT(2) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_USB_LPMRSM_INT BIT(1) + +/* 2 REG_FSISR (Offset 0x0054) */ + +#define BIT_FS_USB_LPMINT_INT BIT(0) + +/* 2 REG_HSIMR (Offset 0x0058) */ + +#define BIT_GPIOF_INT_EN BIT(31) +#define BIT_GPIOE_INT_EN BIT(30) +#define BIT_GPIOD_INT_EN BIT(29) +#define BIT_GPIOC_INT_EN BIT(28) +#define BIT_GPIOB_INT_EN BIT(27) +#define BIT_GPIOA_INT_EN BIT(26) +#define BIT_GPIO9_INT_EN BIT(25) +#define BIT_GPIO8_INT_EN BIT(24) +#define BIT_GPIO7_INT_EN BIT(23) +#define BIT_GPIO6_INT_EN BIT(22) +#define BIT_GPIO5_INT_EN BIT(21) +#define BIT_GPIO4_INT_EN BIT(20) +#define BIT_GPIO3_INT_EN BIT(19) + +/* 2 REG_HSIMR (Offset 0x0058) */ + +#define BIT_GPIO2_INT_EN_V1 BIT(18) + +/* 2 REG_HSIMR (Offset 0x0058) */ + +#define BIT_GPIO1_INT_EN BIT(17) +#define BIT_GPIO0_INT_EN BIT(16) + +/* 2 REG_HSIMR (Offset 0x0058) */ + +#define BIT_PDNINT_EN BIT(7) + +/* 2 REG_HSIMR (Offset 0x0058) */ + +#define BIT_RON_INT_EN BIT(6) + +/* 2 REG_HSIMR (Offset 0x0058) */ + +#define BIT_SPS_OCP_INT_EN BIT(5) + +/* 2 REG_HSIMR (Offset 0x0058) */ + +#define BIT_GPIO15_0_INT_EN BIT(0) + +/* 2 REG_HSISR (Offset 0x005C) */ + +#define BIT_GPIOF_INT BIT(31) +#define BIT_GPIOE_INT BIT(30) +#define BIT_GPIOD_INT BIT(29) +#define BIT_GPIOC_INT BIT(28) +#define BIT_GPIOB_INT BIT(27) +#define BIT_GPIOA_INT BIT(26) +#define BIT_GPIO9_INT BIT(25) +#define BIT_GPIO8_INT BIT(24) +#define BIT_GPIO7_INT BIT(23) +#define BIT_GPIO6_INT BIT(22) +#define BIT_GPIO5_INT BIT(21) +#define BIT_GPIO4_INT BIT(20) +#define BIT_GPIO3_INT BIT(19) + +/* 2 REG_HSISR (Offset 0x005C) */ + +#define BIT_GPIO2_INT_V1 BIT(18) + +/* 2 REG_HSISR (Offset 0x005C) */ + +#define BIT_GPIO1_INT BIT(17) +#define BIT_GPIO0_INT BIT(16) + +/* 2 REG_HSISR (Offset 0x005C) */ + +#define BIT_PDNINT BIT(7) + +/* 2 REG_HSISR (Offset 0x005C) */ + +#define BIT_RON_INT BIT(6) + +/* 2 REG_HSISR (Offset 0x005C) */ + +#define BIT_SPS_OCP_INT BIT(5) + +/* 2 REG_HSISR (Offset 0x005C) */ + +#define BIT_GPIO15_0_INT BIT(0) + +/* 2 REG_GPIO_EXT_CTRL (Offset 0x0060) */ + +#define BIT_SHIFT_GPIO_MOD_15_TO_8 24 +#define BIT_MASK_GPIO_MOD_15_TO_8 0xff +#define BIT_GPIO_MOD_15_TO_8 (x) \ + (((x) & BIT_MASK_GPIO_MOD_15_TO_8) << BIT_SHIFT_GPIO_MOD_15_TO_8) +#define BITS_GPIO_MOD_15_TO_8 \ + (BIT_MASK_GPIO_MOD_15_TO_8 << BIT_SHIFT_GPIO_MOD_15_TO_8) +#define BIT_CLEAR_GPIO_MOD_15_TO_8 (x) ((x) & (~BITS_GPIO_MOD_15_TO_8)) +#define BIT_GET_GPIO_MOD_15_TO_8 (x) \ + (((x) >> BIT_SHIFT_GPIO_MOD_15_TO_8) & BIT_MASK_GPIO_MOD_15_TO_8) +#define BIT_SET_GPIO_MOD_15_TO_8 (x, v) \ + (BIT_CLEAR_GPIO_MOD_15_TO_8(x) | BIT_GPIO_MOD_15_TO_8(v)) + +#define BIT_SHIFT_GPIO_IO_SEL_15_TO_8 16 +#define BIT_MASK_GPIO_IO_SEL_15_TO_8 0xff +#define BIT_GPIO_IO_SEL_15_TO_8 (x) \ + (((x) & BIT_MASK_GPIO_IO_SEL_15_TO_8) << BIT_SHIFT_GPIO_IO_SEL_15_TO_8) +#define BITS_GPIO_IO_SEL_15_TO_8 \ + (BIT_MASK_GPIO_IO_SEL_15_TO_8 << BIT_SHIFT_GPIO_IO_SEL_15_TO_8) +#define BIT_CLEAR_GPIO_IO_SEL_15_TO_8 (x) ((x) & (~BITS_GPIO_IO_SEL_15_TO_8)) +#define BIT_GET_GPIO_IO_SEL_15_TO_8 (x) \ + (((x) >> BIT_SHIFT_GPIO_IO_SEL_15_TO_8) & BIT_MASK_GPIO_IO_SEL_15_TO_8) +#define BIT_SET_GPIO_IO_SEL_15_TO_8 (x, v) \ + (BIT_CLEAR_GPIO_IO_SEL_15_TO_8(x) | BIT_GPIO_IO_SEL_15_TO_8(v)) + +#define BIT_SHIFT_GPIO_OUT_15_TO_8 8 +#define BIT_MASK_GPIO_OUT_15_TO_8 0xff +#define BIT_GPIO_OUT_15_TO_8 (x) \ + (((x) & BIT_MASK_GPIO_OUT_15_TO_8) << BIT_SHIFT_GPIO_OUT_15_TO_8) +#define BITS_GPIO_OUT_15_TO_8 \ + (BIT_MASK_GPIO_OUT_15_TO_8 << BIT_SHIFT_GPIO_OUT_15_TO_8) +#define BIT_CLEAR_GPIO_OUT_15_TO_8 (x) ((x) & (~BITS_GPIO_OUT_15_TO_8)) +#define BIT_GET_GPIO_OUT_15_TO_8 (x) \ + (((x) >> BIT_SHIFT_GPIO_OUT_15_TO_8) & BIT_MASK_GPIO_OUT_15_TO_8) +#define BIT_SET_GPIO_OUT_15_TO_8 (x, v) \ + (BIT_CLEAR_GPIO_OUT_15_TO_8(x) | BIT_GPIO_OUT_15_TO_8(v)) + +#define BIT_SHIFT_GPIO_IN_15_TO_8 0 +#define BIT_MASK_GPIO_IN_15_TO_8 0xff +#define BIT_GPIO_IN_15_TO_8 (x) \ + (((x) & BIT_MASK_GPIO_IN_15_TO_8) << BIT_SHIFT_GPIO_IN_15_TO_8) +#define BITS_GPIO_IN_15_TO_8 \ + (BIT_MASK_GPIO_IN_15_TO_8 << BIT_SHIFT_GPIO_IN_15_TO_8) +#define BIT_CLEAR_GPIO_IN_15_TO_8 (x) ((x) & (~BITS_GPIO_IN_15_TO_8)) +#define BIT_GET_GPIO_IN_15_TO_8 (x) \ + (((x) >> BIT_SHIFT_GPIO_IN_15_TO_8) & BIT_MASK_GPIO_IN_15_TO_8) +#define BIT_SET_GPIO_IN_15_TO_8 (x, v) \ + (BIT_CLEAR_GPIO_IN_15_TO_8(x) | BIT_GPIO_IN_15_TO_8(v)) + +/* 2 REG_SDIO_H2C (Offset 0x10250060) */ + +#define BIT_SHIFT_SDIO_H2C_MSG 0 +#define BIT_MASK_SDIO_H2C_MSG 0xffffffffL +#define BIT_SDIO_H2C_MSG (x) \ + (((x) & BIT_MASK_SDIO_H2C_MSG) << BIT_SHIFT_SDIO_H2C_MSG) +#define BITS_SDIO_H2C_MSG (BIT_MASK_SDIO_H2C_MSG << BIT_SHIFT_SDIO_H2C_MSG) +#define BIT_CLEAR_SDIO_H2C_MSG (x) ((x) & (~BITS_SDIO_H2C_MSG)) +#define BIT_GET_SDIO_H2C_MSG (x) \ + (((x) >> BIT_SHIFT_SDIO_H2C_MSG) & BIT_MASK_SDIO_H2C_MSG) +#define BIT_SET_SDIO_H2C_MSG (x, v) \ + (BIT_CLEAR_SDIO_H2C_MSG(x) | BIT_SDIO_H2C_MSG(v)) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_PAPE_WLBT_SEL BIT(29) +#define BIT_LNAON_WLBT_SEL BIT(28) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_BTGP_GPG3_FEN BIT(26) +#define BIT_BTGP_GPG2_FEN BIT(25) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_BTGP_JTAG_EN BIT(24) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_XTAL_CLK_EXTARNAL_EN BIT(23) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_BTGP_UART0_EN BIT(22) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_BTGP_UART1_EN BIT(21) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_BTGP_SPI_EN BIT(20) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_BTGP_GPIO_E2 BIT(19) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_BTGP_GPIO_EN BIT(18) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_SHIFT_BTGP_GPIO_SL 16 +#define BIT_MASK_BTGP_GPIO_SL 0x3 +#define BIT_BTGP_GPIO_SL (x) \ + (((x) & BIT_MASK_BTGP_GPIO_SL) << BIT_SHIFT_BTGP_GPIO_SL) +#define BITS_BTGP_GPIO_SL (BIT_MASK_BTGP_GPIO_SL << BIT_SHIFT_BTGP_GPIO_SL) +#define BIT_CLEAR_BTGP_GPIO_SL (x) ((x) & (~BITS_BTGP_GPIO_SL)) +#define BIT_GET_BTGP_GPIO_SL (x) \ + (((x) >> BIT_SHIFT_BTGP_GPIO_SL) & BIT_MASK_BTGP_GPIO_SL) +#define BIT_SET_BTGP_GPIO_SL (x, v) \ + (BIT_CLEAR_BTGP_GPIO_SL(x) | BIT_BTGP_GPIO_SL(v)) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_PAD_SDIO_SR BIT(14) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_GPIO14_OUTPUT_PL BIT(13) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_HOST_WAKE_PAD_PULL_EN BIT(12) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_HOST_WAKE_PAD_SL BIT(11) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_PAD_LNAON_SR BIT(10) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_PAD_LNAON_E2 BIT(9) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_SW_LNAON_G_SEL_DATA BIT(8) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_SW_LNAON_A_SEL_DATA BIT(7) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_PAD_PAPE_SR BIT(6) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_PAD_PAPE_E2 BIT(5) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_SW_PAPE_G_SEL_DATA BIT(4) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_SW_PAPE_A_SEL_DATA BIT(3) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_PAD_DPDT_SR BIT(2) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_PAD_DPDT_PAD_E2 BIT(1) + +/* 2 REG_PAD_CTRL1 (Offset 0x0064) */ + +#define BIT_SW_DPDT_SEL_DATA BIT(0) + +/* 2 REG_SDIO_C2H (Offset 0x10250064) */ + +#define BIT_SHIFT_SDIO_C2H_MSG 0 +#define BIT_MASK_SDIO_C2H_MSG 0xffffffffL +#define BIT_SDIO_C2H_MSG (x) \ + (((x) & BIT_MASK_SDIO_C2H_MSG) << BIT_SHIFT_SDIO_C2H_MSG) +#define BITS_SDIO_C2H_MSG (BIT_MASK_SDIO_C2H_MSG << BIT_SHIFT_SDIO_C2H_MSG) +#define BIT_CLEAR_SDIO_C2H_MSG (x) ((x) & (~BITS_SDIO_C2H_MSG)) +#define BIT_GET_SDIO_C2H_MSG (x) \ + (((x) >> BIT_SHIFT_SDIO_C2H_MSG) & BIT_MASK_SDIO_C2H_MSG) +#define BIT_SET_SDIO_C2H_MSG (x, v) \ + (BIT_CLEAR_SDIO_C2H_MSG(x) | BIT_SDIO_C2H_MSG(v)) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_ISO_BD2PP BIT(31) +#define BIT_LDOV12B_EN BIT(30) +#define BIT_CKEN_BTGPS BIT(29) +#define BIT_FEN_BTGPS BIT(28) +#define BIT_BTCPU_BOOTSEL BIT(27) +#define BIT_SPI_SPEEDUP BIT(26) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_DEVWAKE_PAD_TYPE_SEL BIT(24) +#define BIT_CLKREQ_PAD_TYPE_SEL BIT(23) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_EN_CPL_TIMEOUT_PS BIT(22) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_ISO_BTPON2PP BIT(22) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_REG_TXDMA_FAIL_PS BIT(21) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_EN_HWENTR_L1 BIT(19) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_BT_HWROF_EN BIT(19) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_EN_ADV_CLKGATE BIT(18) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_BT_FUNC_EN BIT(18) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_BT_HWPDN_SL BIT(17) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_BT_DISN_EN BIT(16) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_BT_PDN_PULL_EN BIT(15) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_WL_PDN_PULL_EN BIT(14) +#define BIT_EXTERNAL_REQUEST_PL BIT(13) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_GPIO0_2_3_PULL_LOW_EN BIT(12) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_ISO_BA2PP BIT(11) +#define BIT_BT_AFE_LDO_EN BIT(10) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_BT_AFE_PLL_EN BIT(9) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_BT_DIG_CLK_EN BIT(8) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_WL_DRV_EXIST_IDX BIT(5) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_DOP_EHPAD BIT(4) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_WL_HWROF_EN BIT(3) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_WL_FUNC_EN BIT(2) + +/* 2 REG_WL_BT_PWR_CTRL (Offset 0x0068) */ + +#define BIT_WL_HWPDN_SL BIT(1) +#define BIT_WL_HWPDN_EN BIT(0) + +/* 2 REG_SDM_DEBUG (Offset 0x006C) */ + +#define BIT_SHIFT_WLCLK_PHASE 0 +#define BIT_MASK_WLCLK_PHASE 0x1f +#define BIT_WLCLK_PHASE (x) \ + (((x) & BIT_MASK_WLCLK_PHASE) << BIT_SHIFT_WLCLK_PHASE) +#define BITS_WLCLK_PHASE (BIT_MASK_WLCLK_PHASE << BIT_SHIFT_WLCLK_PHASE) +#define BIT_CLEAR_WLCLK_PHASE (x) ((x) & (~BITS_WLCLK_PHASE)) +#define BIT_GET_WLCLK_PHASE (x) \ + (((x) >> BIT_SHIFT_WLCLK_PHASE) & BIT_MASK_WLCLK_PHASE) +#define BIT_SET_WLCLK_PHASE (x, v) \ + (BIT_CLEAR_WLCLK_PHASE(x) | BIT_WLCLK_PHASE(v)) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_DBG_GNT_WL_BT BIT(27) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_LTE_MUX_CTRL_PATH BIT(26) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_LTE_COEX_UART BIT(25) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_3W_LTE_WL_GPIO BIT(24) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_SDIO_INT_POLARITY BIT(19) +#define BIT_SDIO_INT BIT(18) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_SDIO_OFF_EN BIT(17) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_SDIO_ON_EN BIT(16) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_PCIE_WAIT_TIMEOUT_EVENT BIT(10) +#define BIT_PCIE_WAIT_TIME BIT(9) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_MPCIE_REFCLK_XTAL_SEL BIT(8) + +/* 2 REG_SYS_SDIO_CTRL (Offset 0x0070) */ + +#define BIT_SHIFT_SI_AUTHORIZATION 0 +#define BIT_MASK_SI_AUTHORIZATION 0xff +#define BIT_SI_AUTHORIZATION (x) \ + (((x) & BIT_MASK_SI_AUTHORIZATION) << BIT_SHIFT_SI_AUTHORIZATION) +#define BITS_SI_AUTHORIZATION \ + (BIT_MASK_SI_AUTHORIZATION << BIT_SHIFT_SI_AUTHORIZATION) +#define BIT_CLEAR_SI_AUTHORIZATION (x) ((x) & (~BITS_SI_AUTHORIZATION)) +#define BIT_GET_SI_AUTHORIZATION (x) \ + (((x) >> BIT_SHIFT_SI_AUTHORIZATION) & BIT_MASK_SI_AUTHORIZATION) +#define BIT_SET_SI_AUTHORIZATION (x, v) \ + (BIT_CLEAR_SI_AUTHORIZATION(x) | BIT_SI_AUTHORIZATION(v)) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_SHIFT_TSFT_SEL 29 +#define BIT_MASK_TSFT_SEL 0x7 +#define BIT_TSFT_SEL (x) (((x) & BIT_MASK_TSFT_SEL) << BIT_SHIFT_TSFT_SEL) +#define BITS_TSFT_SEL (BIT_MASK_TSFT_SEL << BIT_SHIFT_TSFT_SEL) +#define BIT_CLEAR_TSFT_SEL (x) ((x) & (~BITS_TSFT_SEL)) +#define BIT_GET_TSFT_SEL (x) (((x) >> BIT_SHIFT_TSFT_SEL) & BIT_MASK_TSFT_SEL) +#define BIT_SET_TSFT_SEL (x, v) (BIT_CLEAR_TSFT_SEL(x) | BIT_TSFT_SEL(v)) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_SHIFT_RPWM 24 +#define BIT_MASK_RPWM 0xff +#define BIT_RPWM (x) (((x) & BIT_MASK_RPWM) << BIT_SHIFT_RPWM) +#define BITS_RPWM (BIT_MASK_RPWM << BIT_SHIFT_RPWM) +#define BIT_CLEAR_RPWM (x) ((x) & (~BITS_RPWM)) +#define BIT_GET_RPWM (x) (((x) >> BIT_SHIFT_RPWM) & BIT_MASK_RPWM) +#define BIT_SET_RPWM (x, v) (BIT_CLEAR_RPWM(x) | BIT_RPWM(v)) + +#define BIT_ROM_DLEN BIT(19) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_SHIFT_ROM_PGE 16 +#define BIT_MASK_ROM_PGE 0x7 +#define BIT_ROM_PGE (x) (((x) & BIT_MASK_ROM_PGE) << BIT_SHIFT_ROM_PGE) +#define BITS_ROM_PGE (BIT_MASK_ROM_PGE << BIT_SHIFT_ROM_PGE) +#define BIT_CLEAR_ROM_PGE (x) ((x) & (~BITS_ROM_PGE)) +#define BIT_GET_ROM_PGE (x) (((x) >> BIT_SHIFT_ROM_PGE) & BIT_MASK_ROM_PGE) +#define BIT_SET_ROM_PGE (x, v) (BIT_CLEAR_ROM_PGE(x) | BIT_ROM_PGE(v)) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_USB_HOST_PWR_OFF_EN BIT(12) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_SYM_LPS_BLOCK_EN BIT(11) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_USB_LPM_ACT_EN BIT(10) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_USB_LPM_NY BIT(9) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_USB_SUS_DIS BIT(8) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_SHIFT_SDIO_PAD_E 5 +#define BIT_MASK_SDIO_PAD_E 0x7 +#define BIT_SDIO_PAD_E (x) (((x) & BIT_MASK_SDIO_PAD_E) << BIT_SHIFT_SDIO_PAD_E) +#define BITS_SDIO_PAD_E (BIT_MASK_SDIO_PAD_E << BIT_SHIFT_SDIO_PAD_E) +#define BIT_CLEAR_SDIO_PAD_E (x) ((x) & (~BITS_SDIO_PAD_E)) +#define BIT_GET_SDIO_PAD_E (x) \ + (((x) >> BIT_SHIFT_SDIO_PAD_E) & BIT_MASK_SDIO_PAD_E) +#define BIT_SET_SDIO_PAD_E (x, v) (BIT_CLEAR_SDIO_PAD_E(x) | BIT_SDIO_PAD_E(v)) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_USB_LPPLL_EN BIT(4) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_ROP_SW15 BIT(2) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_PCI_CKRDY_OPT BIT(1) + +/* 2 REG_HCI_OPT_CTRL (Offset 0x0074) */ + +#define BIT_PCI_VAUX_EN BIT(0) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_ZCD_HW_AUTO_EN BIT(27) +#define BIT_ZCD_REGSEL BIT(26) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_SHIFT_AUTO_ZCD_IN_CODE 21 +#define BIT_MASK_AUTO_ZCD_IN_CODE 0x1f +#define BIT_AUTO_ZCD_IN_CODE (x) \ + (((x) & BIT_MASK_AUTO_ZCD_IN_CODE) << BIT_SHIFT_AUTO_ZCD_IN_CODE) +#define BITS_AUTO_ZCD_IN_CODE \ + (BIT_MASK_AUTO_ZCD_IN_CODE << BIT_SHIFT_AUTO_ZCD_IN_CODE) +#define BIT_CLEAR_AUTO_ZCD_IN_CODE (x) ((x) & (~BITS_AUTO_ZCD_IN_CODE)) +#define BIT_GET_AUTO_ZCD_IN_CODE (x) \ + (((x) >> BIT_SHIFT_AUTO_ZCD_IN_CODE) & BIT_MASK_AUTO_ZCD_IN_CODE) +#define BIT_SET_AUTO_ZCD_IN_CODE (x, v) \ + (BIT_CLEAR_AUTO_ZCD_IN_CODE(x) | BIT_AUTO_ZCD_IN_CODE(v)) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_SHIFT_ZCD_CODE_IN_L 16 +#define BIT_MASK_ZCD_CODE_IN_L 0x1f +#define BIT_ZCD_CODE_IN_L (x) \ + (((x) & BIT_MASK_ZCD_CODE_IN_L) << BIT_SHIFT_ZCD_CODE_IN_L) +#define BITS_ZCD_CODE_IN_L (BIT_MASK_ZCD_CODE_IN_L << BIT_SHIFT_ZCD_CODE_IN_L) +#define BIT_CLEAR_ZCD_CODE_IN_L (x) ((x) & (~BITS_ZCD_CODE_IN_L)) +#define BIT_GET_ZCD_CODE_IN_L (x) \ + (((x) >> BIT_SHIFT_ZCD_CODE_IN_L) & BIT_MASK_ZCD_CODE_IN_L) +#define BIT_SET_ZCD_CODE_IN_L (x, v) \ + (BIT_CLEAR_ZCD_CODE_IN_L(x) | BIT_ZCD_CODE_IN_L(v)) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_SHIFT_LDO_HV5_DUMMY 14 +#define BIT_MASK_LDO_HV5_DUMMY 0x3 +#define BIT_LDO_HV5_DUMMY (x) \ + (((x) & BIT_MASK_LDO_HV5_DUMMY) << BIT_SHIFT_LDO_HV5_DUMMY) +#define BITS_LDO_HV5_DUMMY (BIT_MASK_LDO_HV5_DUMMY << BIT_SHIFT_LDO_HV5_DUMMY) +#define BIT_CLEAR_LDO_HV5_DUMMY (x) ((x) & (~BITS_LDO_HV5_DUMMY)) +#define BIT_GET_LDO_HV5_DUMMY (x) \ + (((x) >> BIT_SHIFT_LDO_HV5_DUMMY) & BIT_MASK_LDO_HV5_DUMMY) +#define BIT_SET_LDO_HV5_DUMMY (x, v) \ + (BIT_CLEAR_LDO_HV5_DUMMY(x) | BIT_LDO_HV5_DUMMY(v)) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_SHIFT_REG_VTUNE33_BIT0_TO_BIT1 12 +#define BIT_MASK_REG_VTUNE33_BIT0_TO_BIT1 0x3 +#define BIT_REG_VTUNE33_BIT0_TO_BIT1 (x) \ + (((x) & BIT_MASK_REG_VTUNE33_BIT0_TO_BIT1) \ + << BIT_SHIFT_REG_VTUNE33_BIT0_TO_BIT1) +#define BITS_REG_VTUNE33_BIT0_TO_BIT1 \ + (BIT_MASK_REG_VTUNE33_BIT0_TO_BIT1 \ + << BIT_SHIFT_REG_VTUNE33_BIT0_TO_BIT1) +#define BIT_CLEAR_REG_VTUNE33_BIT0_TO_BIT1 (x) \ + ((x) & (~BITS_REG_VTUNE33_BIT0_TO_BIT1)) +#define BIT_GET_REG_VTUNE33_BIT0_TO_BIT1 (x) \ + (((x) >> BIT_SHIFT_REG_VTUNE33_BIT0_TO_BIT1) & \ + BIT_MASK_REG_VTUNE33_BIT0_TO_BIT1) +#define BIT_SET_REG_VTUNE33_BIT0_TO_BIT1 (x, v) \ + (BIT_CLEAR_REG_VTUNE33_BIT0_TO_BIT1(x) | \ + BIT_REG_VTUNE33_BIT0_TO_BIT1(v)) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_SHIFT_REG_STANDBY33_BIT0_TO_BIT1 10 +#define BIT_MASK_REG_STANDBY33_BIT0_TO_BIT1 0x3 +#define BIT_REG_STANDBY33_BIT0_TO_BIT1 (x) \ + (((x) & BIT_MASK_REG_STANDBY33_BIT0_TO_BIT1) \ + << BIT_SHIFT_REG_STANDBY33_BIT0_TO_BIT1) +#define BITS_REG_STANDBY33_BIT0_TO_BIT1 \ + (BIT_MASK_REG_STANDBY33_BIT0_TO_BIT1 \ + << BIT_SHIFT_REG_STANDBY33_BIT0_TO_BIT1) +#define BIT_CLEAR_REG_STANDBY33_BIT0_TO_BIT1 (x) \ + ((x) & (~BITS_REG_STANDBY33_BIT0_TO_BIT1)) +#define BIT_GET_REG_STANDBY33_BIT0_TO_BIT1 (x) \ + (((x) >> BIT_SHIFT_REG_STANDBY33_BIT0_TO_BIT1) & \ + BIT_MASK_REG_STANDBY33_BIT0_TO_BIT1) +#define BIT_SET_REG_STANDBY33_BIT0_TO_BIT1 (x, v) \ + (BIT_CLEAR_REG_STANDBY33_BIT0_TO_BIT1(x) | \ + BIT_REG_STANDBY33_BIT0_TO_BIT1(v)) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_SHIFT_REG_LOAD33_BIT0_TO_BIT1 8 +#define BIT_MASK_REG_LOAD33_BIT0_TO_BIT1 0x3 +#define BIT_REG_LOAD33_BIT0_TO_BIT1 (x) \ + (((x) & BIT_MASK_REG_LOAD33_BIT0_TO_BIT1) \ + << BIT_SHIFT_REG_LOAD33_BIT0_TO_BIT1) +#define BITS_REG_LOAD33_BIT0_TO_BIT1 \ + (BIT_MASK_REG_LOAD33_BIT0_TO_BIT1 << BIT_SHIFT_REG_LOAD33_BIT0_TO_BIT1) +#define BIT_CLEAR_REG_LOAD33_BIT0_TO_BIT1 (x) \ + ((x) & (~BITS_REG_LOAD33_BIT0_TO_BIT1)) +#define BIT_GET_REG_LOAD33_BIT0_TO_BIT1 (x) \ + (((x) >> BIT_SHIFT_REG_LOAD33_BIT0_TO_BIT1) & \ + BIT_MASK_REG_LOAD33_BIT0_TO_BIT1) +#define BIT_SET_REG_LOAD33_BIT0_TO_BIT1 (x, v) \ + (BIT_CLEAR_REG_LOAD33_BIT0_TO_BIT1(x) | BIT_REG_LOAD33_BIT0_TO_BIT1(v)) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_REG_BYPASS_L BIT(7) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_REG_LDOF_L BIT(6) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_REG_TYPE_L_V1 BIT(5) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_ARENB_L BIT(3) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_SHIFT_CFC_L 1 +#define BIT_MASK_CFC_L 0x3 +#define BIT_CFC_L (x) (((x) & BIT_MASK_CFC_L) << BIT_SHIFT_CFC_L) +#define BITS_CFC_L (BIT_MASK_CFC_L << BIT_SHIFT_CFC_L) +#define BIT_CLEAR_CFC_L (x) ((x) & (~BITS_CFC_L)) +#define BIT_GET_CFC_L (x) (((x) >> BIT_SHIFT_CFC_L) & BIT_MASK_CFC_L) +#define BIT_SET_CFC_L (x, v) (BIT_CLEAR_CFC_L(x) | BIT_CFC_L(v)) + +/* 2 REG_LDO_SWR_CTRL (Offset 0x007C) */ + +#define BIT_REG_OCPS_L_V1 BIT(0) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_ANA_PORT_EN BIT(22) +#define BIT_MAC_PORT_EN BIT(21) +#define BIT_BOOT_FSPI_EN BIT(20) +#define BIT_FW_INIT_RDY BIT(15) +#define BIT_FW_DW_RDY BIT(14) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_SHIFT_CPU_CLK_SEL 12 +#define BIT_MASK_CPU_CLK_SEL 0x3 +#define BIT_CPU_CLK_SEL (x) \ + (((x) & BIT_MASK_CPU_CLK_SEL) << BIT_SHIFT_CPU_CLK_SEL) +#define BITS_CPU_CLK_SEL (BIT_MASK_CPU_CLK_SEL << BIT_SHIFT_CPU_CLK_SEL) +#define BIT_CLEAR_CPU_CLK_SEL (x) ((x) & (~BITS_CPU_CLK_SEL)) +#define BIT_GET_CPU_CLK_SEL (x) \ + (((x) >> BIT_SHIFT_CPU_CLK_SEL) & BIT_MASK_CPU_CLK_SEL) +#define BIT_SET_CPU_CLK_SEL (x, v) \ + (BIT_CLEAR_CPU_CLK_SEL(x) | BIT_CPU_CLK_SEL(v)) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_CCLK_CHG_MASK BIT(11) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_EMEM__TXBUF_CHKSUM_OK BIT(10) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_EMEM_TXBUF_DW_RDY BIT(9) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_EMEM_CHKSUM_OK BIT(8) +#define BIT_EMEM_DW_OK BIT(7) +#define BIT_DMEM_CHKSUM_OK BIT(6) + +/* 2 REG_SDIO_HRPWM1 (Offset 0x10250080) */ + +#define BIT_ACK BIT(6) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_DMEM_DW_OK BIT(5) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_IMEM_CHKSUM_OK BIT(4) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_IMEM_DW_OK BIT(3) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_IMEM_BOOT_LOAD_CHKSUM_OK BIT(2) + +/* 2 REG_MCUFW_CTRL (Offset 0x0080) */ + +#define BIT_IMEM_BOOT_LOAD_DW_OK BIT(1) + +/* 2 REG_SDIO_HRPWM1 (Offset 0x10250080) */ + +#define BIT_REQ_PS BIT(0) + +/* 2 REG_MCU_TST_CFG (Offset 0x0084) */ + +#define BIT_SHIFT_C2H_MSG 0 +#define BIT_MASK_C2H_MSG 0xffff +#define BIT_C2H_MSG (x) (((x) & BIT_MASK_C2H_MSG) << BIT_SHIFT_C2H_MSG) +#define BITS_C2H_MSG (BIT_MASK_C2H_MSG << BIT_SHIFT_C2H_MSG) +#define BIT_CLEAR_C2H_MSG (x) ((x) & (~BITS_C2H_MSG)) +#define BIT_GET_C2H_MSG (x) (((x) >> BIT_SHIFT_C2H_MSG) & BIT_MASK_C2H_MSG) +#define BIT_SET_C2H_MSG (x, v) (BIT_CLEAR_C2H_MSG(x) | BIT_C2H_MSG(v)) + +/* 2 REG_SDIO_BUS_CTRL (Offset 0x10250085) */ + +#define BIT_PAD_CLK_XHGE_EN BIT(3) +#define BIT_INTER_CLK_EN BIT(2) +#define BIT_EN_RPT_TXCRC BIT(1) +#define BIT_DIS_RXDMA_STS BIT(0) + +/* 2 REG_SDIO_HSUS_CTRL (Offset 0x10250086) */ + +#define BIT_INTR_CTRL BIT(4) +#define BIT_SDIO_VOLTAGE BIT(3) +#define BIT_BYPASS_INIT BIT(2) + +/* 2 REG_SDIO_HSUS_CTRL (Offset 0x10250086) */ + +#define BIT_HCI_RESUME_RDY BIT(1) +#define BIT_HCI_SUS_REQ BIT(0) + +/* 2 REG_HMEBOX_E0_E1 (Offset 0x0088) */ + +#define BIT_SHIFT_HOST_MSG_E1 16 +#define BIT_MASK_HOST_MSG_E1 0xffff +#define BIT_HOST_MSG_E1 (x) \ + (((x) & BIT_MASK_HOST_MSG_E1) << BIT_SHIFT_HOST_MSG_E1) +#define BITS_HOST_MSG_E1 (BIT_MASK_HOST_MSG_E1 << BIT_SHIFT_HOST_MSG_E1) +#define BIT_CLEAR_HOST_MSG_E1 (x) ((x) & (~BITS_HOST_MSG_E1)) +#define BIT_GET_HOST_MSG_E1 (x) \ + (((x) >> BIT_SHIFT_HOST_MSG_E1) & BIT_MASK_HOST_MSG_E1) +#define BIT_SET_HOST_MSG_E1 (x, v) \ + (BIT_CLEAR_HOST_MSG_E1(x) | BIT_HOST_MSG_E1(v)) + +#define BIT_SHIFT_HOST_MSG_E0 0 +#define BIT_MASK_HOST_MSG_E0 0xffff +#define BIT_HOST_MSG_E0 (x) \ + (((x) & BIT_MASK_HOST_MSG_E0) << BIT_SHIFT_HOST_MSG_E0) +#define BITS_HOST_MSG_E0 (BIT_MASK_HOST_MSG_E0 << BIT_SHIFT_HOST_MSG_E0) +#define BIT_CLEAR_HOST_MSG_E0 (x) ((x) & (~BITS_HOST_MSG_E0)) +#define BIT_GET_HOST_MSG_E0 (x) \ + (((x) >> BIT_SHIFT_HOST_MSG_E0) & BIT_MASK_HOST_MSG_E0) +#define BIT_SET_HOST_MSG_E0 (x, v) \ + (BIT_CLEAR_HOST_MSG_E0(x) | BIT_HOST_MSG_E0(v)) + +/* 2 REG_SDIO_RESPONSE_TIMER (Offset 0x10250088) */ + +#define BIT_SHIFT_CMDIN_2RESP_TIMER 0 +#define BIT_MASK_CMDIN_2RESP_TIMER 0xffff +#define BIT_CMDIN_2RESP_TIMER (x) \ + (((x) & BIT_MASK_CMDIN_2RESP_TIMER) << BIT_SHIFT_CMDIN_2RESP_TIMER) +#define BITS_CMDIN_2RESP_TIMER \ + (BIT_MASK_CMDIN_2RESP_TIMER << BIT_SHIFT_CMDIN_2RESP_TIMER) +#define BIT_CLEAR_CMDIN_2RESP_TIMER (x) ((x) & (~BITS_CMDIN_2RESP_TIMER)) +#define BIT_GET_CMDIN_2RESP_TIMER (x) \ + (((x) >> BIT_SHIFT_CMDIN_2RESP_TIMER) & BIT_MASK_CMDIN_2RESP_TIMER) +#define BIT_SET_CMDIN_2RESP_TIMER (x, v) \ + (BIT_CLEAR_CMDIN_2RESP_TIMER(x) | BIT_CMDIN_2RESP_TIMER(v)) + +/* 2 REG_SDIO_CMD_CRC (Offset 0x1025008A) */ + +#define BIT_SHIFT_SDIO_CMD_CRC_V1 0 +#define BIT_MASK_SDIO_CMD_CRC_V1 0xff +#define BIT_SDIO_CMD_CRC_V1 (x) \ + (((x) & BIT_MASK_SDIO_CMD_CRC_V1) << BIT_SHIFT_SDIO_CMD_CRC_V1) +#define BITS_SDIO_CMD_CRC_V1 \ + (BIT_MASK_SDIO_CMD_CRC_V1 << BIT_SHIFT_SDIO_CMD_CRC_V1) +#define BIT_CLEAR_SDIO_CMD_CRC_V1 (x) ((x) & (~BITS_SDIO_CMD_CRC_V1)) +#define BIT_GET_SDIO_CMD_CRC_V1 (x) \ + (((x) >> BIT_SHIFT_SDIO_CMD_CRC_V1) & BIT_MASK_SDIO_CMD_CRC_V1) +#define BIT_SET_SDIO_CMD_CRC_V1 (x, v) \ + (BIT_CLEAR_SDIO_CMD_CRC_V1(x) | BIT_SDIO_CMD_CRC_V1(v)) + +/* 2 REG_HMEBOX_E2_E3 (Offset 0x008C) */ + +#define BIT_SHIFT_HOST_MSG_E3 16 +#define BIT_MASK_HOST_MSG_E3 0xffff +#define BIT_HOST_MSG_E3 (x) \ + (((x) & BIT_MASK_HOST_MSG_E3) << BIT_SHIFT_HOST_MSG_E3) +#define BITS_HOST_MSG_E3 (BIT_MASK_HOST_MSG_E3 << BIT_SHIFT_HOST_MSG_E3) +#define BIT_CLEAR_HOST_MSG_E3 (x) ((x) & (~BITS_HOST_MSG_E3)) +#define BIT_GET_HOST_MSG_E3 (x) \ + (((x) >> BIT_SHIFT_HOST_MSG_E3) & BIT_MASK_HOST_MSG_E3) +#define BIT_SET_HOST_MSG_E3 (x, v) \ + (BIT_CLEAR_HOST_MSG_E3(x) | BIT_HOST_MSG_E3(v)) + +#define BIT_SHIFT_HOST_MSG_E2 0 +#define BIT_MASK_HOST_MSG_E2 0xffff +#define BIT_HOST_MSG_E2 (x) \ + (((x) & BIT_MASK_HOST_MSG_E2) << BIT_SHIFT_HOST_MSG_E2) +#define BITS_HOST_MSG_E2 (BIT_MASK_HOST_MSG_E2 << BIT_SHIFT_HOST_MSG_E2) +#define BIT_CLEAR_HOST_MSG_E2 (x) ((x) & (~BITS_HOST_MSG_E2)) +#define BIT_GET_HOST_MSG_E2 (x) \ + (((x) >> BIT_SHIFT_HOST_MSG_E2) & BIT_MASK_HOST_MSG_E2) +#define BIT_SET_HOST_MSG_E2 (x, v) \ + (BIT_CLEAR_HOST_MSG_E2(x) | BIT_HOST_MSG_E2(v)) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_EABM BIT(31) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_ACKF BIT(30) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_TXFIFO_TH_INT BIT(30) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_DLDM BIT(29) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_ESWR BIT(28) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_PWMM BIT(27) +#define BIT_WLLPSOP_EECK BIT(26) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_WLMACOFF BIT(25) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_EXTAL BIT(24) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WL_SYNPON_VOLTSPDN BIT(23) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_WLBBOFF BIT(22) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WLLPSOP_WLMEM_DS BIT(21) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_SHIFT_LPLDH12_VADJ_STEP_DN 12 +#define BIT_MASK_LPLDH12_VADJ_STEP_DN 0xf +#define BIT_LPLDH12_VADJ_STEP_DN (x) \ + (((x) & BIT_MASK_LPLDH12_VADJ_STEP_DN) \ + << BIT_SHIFT_LPLDH12_VADJ_STEP_DN) +#define BITS_LPLDH12_VADJ_STEP_DN \ + (BIT_MASK_LPLDH12_VADJ_STEP_DN << BIT_SHIFT_LPLDH12_VADJ_STEP_DN) +#define BIT_CLEAR_LPLDH12_VADJ_STEP_DN (x) ((x) & (~BITS_LPLDH12_VADJ_STEP_DN)) +#define BIT_GET_LPLDH12_VADJ_STEP_DN (x) \ + (((x) >> BIT_SHIFT_LPLDH12_VADJ_STEP_DN) & \ + BIT_MASK_LPLDH12_VADJ_STEP_DN) +#define BIT_SET_LPLDH12_VADJ_STEP_DN (x, v) \ + (BIT_CLEAR_LPLDH12_VADJ_STEP_DN(x) | BIT_LPLDH12_VADJ_STEP_DN(v)) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_SHIFT_V15ADJ_L1_STEP_DN 8 +#define BIT_MASK_V15ADJ_L1_STEP_DN 0x7 +#define BIT_V15ADJ_L1_STEP_DN (x) \ + (((x) & BIT_MASK_V15ADJ_L1_STEP_DN) << BIT_SHIFT_V15ADJ_L1_STEP_DN) +#define BITS_V15ADJ_L1_STEP_DN \ + (BIT_MASK_V15ADJ_L1_STEP_DN << BIT_SHIFT_V15ADJ_L1_STEP_DN) +#define BIT_CLEAR_V15ADJ_L1_STEP_DN (x) ((x) & (~BITS_V15ADJ_L1_STEP_DN)) +#define BIT_GET_V15ADJ_L1_STEP_DN (x) \ + (((x) >> BIT_SHIFT_V15ADJ_L1_STEP_DN) & BIT_MASK_V15ADJ_L1_STEP_DN) +#define BIT_SET_V15ADJ_L1_STEP_DN (x, v) \ + (BIT_CLEAR_V15ADJ_L1_STEP_DN(x) | BIT_V15ADJ_L1_STEP_DN(v)) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_REGU_32K_CLK_EN BIT(1) +#define BIT_DRV_WLAN_INT_CLR BIT(1) + +/* 2 REG_WLLPS_CTRL (Offset 0x0090) */ + +#define BIT_WL_LPS_EN BIT(0) + +/* 2 REG_SDIO_HSISR (Offset 0x10250090) */ + +#define BIT_DRV_WLAN_INT BIT(0) + +/* 2 REG_AFE_CTRL5 (Offset 0x0094) */
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.15.1
Part of the diff is not shown here. View the raw message.
[email protected]
maintainerPATCH v3 8/19 rtlwifi: halmac: add bit field definitions of rtl8822b
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
List bit fields definitions belong to rtl8822b's registers.
--- .../realtek/rtlwifi/halmac/halmac_bit_8822b.h | 17870 +++++++++++++++++++ 1 file changed, 17870 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_bit_8822b.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_bit_8822b.h new file +17870 -0
@@ -0,0 +1,17870 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef __INC_HALMAC_BIT_8822B_H +#define __INC_HALMAC_BIT_8822B_H + +#define CPU_OPT_WIDTH 0x1F + +/* 2 REG_NOT_VALID_8822B */ + +/* 2 REG_SYS_ISO_CTRL_8822B */ +#define BIT_PWC_EV12V_8822B BIT(15) +#define BIT_PWC_EV25V_8822B BIT(14) +#define BIT_PA33V_EN_8822B BIT(13) +#define BIT_PA12V_EN_8822B BIT(12) +#define BIT_UA33V_EN_8822B BIT(11) +#define BIT_UA12V_EN_8822B BIT(10) +#define BIT_ISO_RFDIO_8822B BIT(9) +#define BIT_ISO_EB2CORE_8822B BIT(8) +#define BIT_ISO_DIOE_8822B BIT(7) +#define BIT_ISO_WLPON2PP_8822B BIT(6) +#define BIT_ISO_IP2MAC_WA2PP_8822B BIT(5) +#define BIT_ISO_PD2CORE_8822B BIT(4) +#define BIT_ISO_PA2PCIE_8822B BIT(3) +#define BIT_ISO_UD2CORE_8822B BIT(2) +#define BIT_ISO_UA2USB_8822B BIT(1) +#define BIT_ISO_WD2PP_8822B BIT(0) + +/* 2 REG_SYS_FUNC_EN_8822B */ +#define BIT_FEN_MREGEN_8822B BIT(15) +#define BIT_FEN_HWPDN_8822B BIT(14) +#define BIT_EN_25_1_8822B BIT(13) +#define BIT_FEN_ELDR_8822B BIT(12) +#define BIT_FEN_DCORE_8822B BIT(11) +#define BIT_FEN_CPUEN_8822B BIT(10) +#define BIT_FEN_DIOE_8822B BIT(9) +#define BIT_FEN_PCIED_8822B BIT(8) +#define BIT_FEN_PPLL_8822B BIT(7) +#define BIT_FEN_PCIEA_8822B BIT(6) +#define BIT_FEN_DIO_PCIE_8822B BIT(5) +#define BIT_FEN_USBD_8822B BIT(4) +#define BIT_FEN_UPLL_8822B BIT(3) +#define BIT_FEN_USBA_8822B BIT(2) +#define BIT_FEN_BB_GLB_RSTN_8822B BIT(1) +#define BIT_FEN_BBRSTB_8822B BIT(0) + +/* 2 REG_SYS_PW_CTRL_8822B */ +#define BIT_SOP_EABM_8822B BIT(31) +#define BIT_SOP_ACKF_8822B BIT(30) +#define BIT_SOP_ERCK_8822B BIT(29) +#define BIT_SOP_ESWR_8822B BIT(28) +#define BIT_SOP_PWMM_8822B BIT(27) +#define BIT_SOP_EECK_8822B BIT(26) +#define BIT_SOP_EXTL_8822B BIT(24) +#define BIT_SYM_OP_RING_12M_8822B BIT(22) +#define BIT_ROP_SWPR_8822B BIT(21) +#define BIT_DIS_HW_LPLDM_8822B BIT(20) +#define BIT_OPT_SWRST_WLMCU_8822B BIT(19) +#define BIT_RDY_SYSPWR_8822B BIT(17) +#define BIT_EN_WLON_8822B BIT(16) +#define BIT_APDM_HPDN_8822B BIT(15) +#define BIT_AFSM_PCIE_SUS_EN_8822B BIT(12) +#define BIT_AFSM_WLSUS_EN_8822B BIT(11) +#define BIT_APFM_SWLPS_8822B BIT(10) +#define BIT_APFM_OFFMAC_8822B BIT(9) +#define BIT_APFN_ONMAC_8822B BIT(8) +#define BIT_CHIP_PDN_EN_8822B BIT(7) +#define BIT_RDY_MACDIS_8822B BIT(6) +#define BIT_RING_CLK_12M_EN_8822B BIT(4) +#define BIT_PFM_WOWL_8822B BIT(3) +#define BIT_PFM_LDKP_8822B BIT(2) +#define BIT_WL_HCI_ALD_8822B BIT(1) +#define BIT_PFM_LDALL_8822B BIT(0) + +/* 2 REG_SYS_CLK_CTRL_8822B */ +#define BIT_LDO_DUMMY_8822B BIT(15) +#define BIT_CPU_CLK_EN_8822B BIT(14) +#define BIT_SYMREG_CLK_EN_8822B BIT(13) +#define BIT_HCI_CLK_EN_8822B BIT(12) +#define BIT_MAC_CLK_EN_8822B BIT(11) +#define BIT_SEC_CLK_EN_8822B BIT(10) +#define BIT_PHY_SSC_RSTB_8822B BIT(9) +#define BIT_EXT_32K_EN_8822B BIT(8) +#define BIT_WL_CLK_TEST_8822B BIT(7) +#define BIT_OP_SPS_PWM_EN_8822B BIT(6) +#define BIT_LOADER_CLK_EN_8822B BIT(5) +#define BIT_MACSLP_8822B BIT(4) +#define BIT_WAKEPAD_EN_8822B BIT(3) +#define BIT_ROMD16V_EN_8822B BIT(2) +#define BIT_CKANA12M_EN_8822B BIT(1) +#define BIT_CNTD16V_EN_8822B BIT(0) + +/* 2 REG_SYS_EEPROM_CTRL_8822B */ + +#define BIT_SHIFT_VPDIDX_8822B 8 +#define BIT_MASK_VPDIDX_8822B 0xff +#define BIT_VPDIDX_8822B (x) \ + (((x) & BIT_MASK_VPDIDX_8822B) << BIT_SHIFT_VPDIDX_8822B) +#define BITS_VPDIDX_8822B (BIT_MASK_VPDIDX_8822B << BIT_SHIFT_VPDIDX_8822B) +#define BIT_CLEAR_VPDIDX_8822B (x) ((x) & (~BITS_VPDIDX_8822B)) +#define BIT_GET_VPDIDX_8822B (x) \ + (((x) >> BIT_SHIFT_VPDIDX_8822B) & BIT_MASK_VPDIDX_8822B) +#define BIT_SET_VPDIDX_8822B (x, v) \ + (BIT_CLEAR_VPDIDX_8822B(x) | BIT_VPDIDX_8822B(v)) + +#define BIT_SHIFT_EEM1_0_8822B 6 +#define BIT_MASK_EEM1_0_8822B 0x3 +#define BIT_EEM1_0_8822B (x) \ + (((x) & BIT_MASK_EEM1_0_8822B) << BIT_SHIFT_EEM1_0_8822B) +#define BITS_EEM1_0_8822B (BIT_MASK_EEM1_0_8822B << BIT_SHIFT_EEM1_0_8822B) +#define BIT_CLEAR_EEM1_0_8822B (x) ((x) & (~BITS_EEM1_0_8822B)) +#define BIT_GET_EEM1_0_8822B (x) \ + (((x) >> BIT_SHIFT_EEM1_0_8822B) & BIT_MASK_EEM1_0_8822B) +#define BIT_SET_EEM1_0_8822B (x, v) \ + (BIT_CLEAR_EEM1_0_8822B(x) | BIT_EEM1_0_8822B(v)) + +#define BIT_AUTOLOAD_SUS_8822B BIT(5) +#define BIT_EERPOMSEL_8822B BIT(4) +#define BIT_EECS_V1_8822B BIT(3) +#define BIT_EESK_V1_8822B BIT(2) +#define BIT_EEDI_V1_8822B BIT(1) +#define BIT_EEDO_V1_8822B BIT(0) + +/* 2 REG_EE_VPD_8822B */ + +#define BIT_SHIFT_VPD_DATA_8822B 0 +#define BIT_MASK_VPD_DATA_8822B 0xffffffffL +#define BIT_VPD_DATA_8822B (x) \ + (((x) & BIT_MASK_VPD_DATA_8822B) << BIT_SHIFT_VPD_DATA_8822B) +#define BITS_VPD_DATA_8822B \ + (BIT_MASK_VPD_DATA_8822B << BIT_SHIFT_VPD_DATA_8822B) +#define BIT_CLEAR_VPD_DATA_8822B (x) ((x) & (~BITS_VPD_DATA_8822B)) +#define BIT_GET_VPD_DATA_8822B (x) \ + (((x) >> BIT_SHIFT_VPD_DATA_8822B) & BIT_MASK_VPD_DATA_8822B) +#define BIT_SET_VPD_DATA_8822B (x, v) \ + (BIT_CLEAR_VPD_DATA_8822B(x) | BIT_VPD_DATA_8822B(v)) + +/* 2 REG_SYS_SWR_CTRL1_8822B */ +#define BIT_C2_L_BIT0_8822B BIT(31) + +#define BIT_SHIFT_C1_L_8822B 29 +#define BIT_MASK_C1_L_8822B 0x3 +#define BIT_C1_L_8822B (x) (((x) & BIT_MASK_C1_L_8822B) << BIT_SHIFT_C1_L_8822B) +#define BITS_C1_L_8822B (BIT_MASK_C1_L_8822B << BIT_SHIFT_C1_L_8822B) +#define BIT_CLEAR_C1_L_8822B (x) ((x) & (~BITS_C1_L_8822B)) +#define BIT_GET_C1_L_8822B (x) \ + (((x) >> BIT_SHIFT_C1_L_8822B) & BIT_MASK_C1_L_8822B) +#define BIT_SET_C1_L_8822B (x, v) (BIT_CLEAR_C1_L_8822B(x) | BIT_C1_L_8822B(v)) + +#define BIT_SHIFT_REG_FREQ_L_8822B 25 +#define BIT_MASK_REG_FREQ_L_8822B 0x7 +#define BIT_REG_FREQ_L_8822B (x) \ + (((x) & BIT_MASK_REG_FREQ_L_8822B) << BIT_SHIFT_REG_FREQ_L_8822B) +#define BITS_REG_FREQ_L_8822B \ + (BIT_MASK_REG_FREQ_L_8822B << BIT_SHIFT_REG_FREQ_L_8822B) +#define BIT_CLEAR_REG_FREQ_L_8822B (x) ((x) & (~BITS_REG_FREQ_L_8822B)) +#define BIT_GET_REG_FREQ_L_8822B (x) \ + (((x) >> BIT_SHIFT_REG_FREQ_L_8822B) & BIT_MASK_REG_FREQ_L_8822B) +#define BIT_SET_REG_FREQ_L_8822B (x, v) \ + (BIT_CLEAR_REG_FREQ_L_8822B(x) | BIT_REG_FREQ_L_8822B(v)) + +#define BIT_REG_EN_DUTY_8822B BIT(24) + +#define BIT_SHIFT_REG_MODE_8822B 22 +#define BIT_MASK_REG_MODE_8822B 0x3 +#define BIT_REG_MODE_8822B (x) \ + (((x) & BIT_MASK_REG_MODE_8822B) << BIT_SHIFT_REG_MODE_8822B) +#define BITS_REG_MODE_8822B \ + (BIT_MASK_REG_MODE_8822B << BIT_SHIFT_REG_MODE_8822B) +#define BIT_CLEAR_REG_MODE_8822B (x) ((x) & (~BITS_REG_MODE_8822B)) +#define BIT_GET_REG_MODE_8822B (x) \ + (((x) >> BIT_SHIFT_REG_MODE_8822B) & BIT_MASK_REG_MODE_8822B) +#define BIT_SET_REG_MODE_8822B (x, v) \ + (BIT_CLEAR_REG_MODE_8822B(x) | BIT_REG_MODE_8822B(v)) + +#define BIT_REG_EN_SP_8822B BIT(21) +#define BIT_REG_AUTO_L_8822B BIT(20) +#define BIT_SW18_SELD_BIT0_8822B BIT(19) +#define BIT_SW18_POWOCP_8822B BIT(18) + +#define BIT_SHIFT_OCP_L1_8822B 15 +#define BIT_MASK_OCP_L1_8822B 0x7 +#define BIT_OCP_L1_8822B (x) \ + (((x) & BIT_MASK_OCP_L1_8822B) << BIT_SHIFT_OCP_L1_8822B) +#define BITS_OCP_L1_8822B (BIT_MASK_OCP_L1_8822B << BIT_SHIFT_OCP_L1_8822B) +#define BIT_CLEAR_OCP_L1_8822B (x) ((x) & (~BITS_OCP_L1_8822B)) +#define BIT_GET_OCP_L1_8822B (x) \ + (((x) >> BIT_SHIFT_OCP_L1_8822B) & BIT_MASK_OCP_L1_8822B) +#define BIT_SET_OCP_L1_8822B (x, v) \ + (BIT_CLEAR_OCP_L1_8822B(x) | BIT_OCP_L1_8822B(v)) + +#define BIT_SHIFT_CF_L_8822B 13 +#define BIT_MASK_CF_L_8822B 0x3 +#define BIT_CF_L_8822B (x) (((x) & BIT_MASK_CF_L_8822B) << BIT_SHIFT_CF_L_8822B) +#define BITS_CF_L_8822B (BIT_MASK_CF_L_8822B << BIT_SHIFT_CF_L_8822B) +#define BIT_CLEAR_CF_L_8822B (x) ((x) & (~BITS_CF_L_8822B)) +#define BIT_GET_CF_L_8822B (x) \ + (((x) >> BIT_SHIFT_CF_L_8822B) & BIT_MASK_CF_L_8822B) +#define BIT_SET_CF_L_8822B (x, v) (BIT_CLEAR_CF_L_8822B(x) | BIT_CF_L_8822B(v)) + +#define BIT_SW18_FPWM_8822B BIT(11) +#define BIT_SW18_SWEN_8822B BIT(9) +#define BIT_SW18_LDEN_8822B BIT(8) +#define BIT_MAC_ID_EN_8822B BIT(7) +#define BIT_AFE_BGEN_8822B BIT(0) + +/* 2 REG_SYS_SWR_CTRL2_8822B */ +#define BIT_POW_ZCD_L_8822B BIT(31) +#define BIT_AUTOZCD_L_8822B BIT(30) + +#define BIT_SHIFT_REG_DELAY_8822B 28 +#define BIT_MASK_REG_DELAY_8822B 0x3 +#define BIT_REG_DELAY_8822B (x) \ + (((x) & BIT_MASK_REG_DELAY_8822B) << BIT_SHIFT_REG_DELAY_8822B) +#define BITS_REG_DELAY_8822B \ + (BIT_MASK_REG_DELAY_8822B << BIT_SHIFT_REG_DELAY_8822B) +#define BIT_CLEAR_REG_DELAY_8822B (x) ((x) & (~BITS_REG_DELAY_8822B)) +#define BIT_GET_REG_DELAY_8822B (x) \ + (((x) >> BIT_SHIFT_REG_DELAY_8822B) & BIT_MASK_REG_DELAY_8822B) +#define BIT_SET_REG_DELAY_8822B (x, v) \ + (BIT_CLEAR_REG_DELAY_8822B(x) | BIT_REG_DELAY_8822B(v)) + +#define BIT_SHIFT_V15ADJ_L1_V1_8822B 24 +#define BIT_MASK_V15ADJ_L1_V1_8822B 0x7 +#define BIT_V15ADJ_L1_V1_8822B (x) \ + (((x) & BIT_MASK_V15ADJ_L1_V1_8822B) << BIT_SHIFT_V15ADJ_L1_V1_8822B) +#define BITS_V15ADJ_L1_V1_8822B \ + (BIT_MASK_V15ADJ_L1_V1_8822B << BIT_SHIFT_V15ADJ_L1_V1_8822B) +#define BIT_CLEAR_V15ADJ_L1_V1_8822B (x) ((x) & (~BITS_V15ADJ_L1_V1_8822B)) +#define BIT_GET_V15ADJ_L1_V1_8822B (x) \ + (((x) >> BIT_SHIFT_V15ADJ_L1_V1_8822B) & BIT_MASK_V15ADJ_L1_V1_8822B) +#define BIT_SET_V15ADJ_L1_V1_8822B (x, v) \ + (BIT_CLEAR_V15ADJ_L1_V1_8822B(x) | BIT_V15ADJ_L1_V1_8822B(v)) + +#define BIT_SHIFT_VOL_L1_V1_8822B 20 +#define BIT_MASK_VOL_L1_V1_8822B 0xf +#define BIT_VOL_L1_V1_8822B (x) \ + (((x) & BIT_MASK_VOL_L1_V1_8822B) << BIT_SHIFT_VOL_L1_V1_8822B) +#define BITS_VOL_L1_V1_8822B \ + (BIT_MASK_VOL_L1_V1_8822B << BIT_SHIFT_VOL_L1_V1_8822B) +#define BIT_CLEAR_VOL_L1_V1_8822B (x) ((x) & (~BITS_VOL_L1_V1_8822B)) +#define BIT_GET_VOL_L1_V1_8822B (x) \ + (((x) >> BIT_SHIFT_VOL_L1_V1_8822B) & BIT_MASK_VOL_L1_V1_8822B) +#define BIT_SET_VOL_L1_V1_8822B (x, v) \ + (BIT_CLEAR_VOL_L1_V1_8822B(x) | BIT_VOL_L1_V1_8822B(v)) + +#define BIT_SHIFT_IN_L1_V1_8822B 17 +#define BIT_MASK_IN_L1_V1_8822B 0x7 +#define BIT_IN_L1_V1_8822B (x) \ + (((x) & BIT_MASK_IN_L1_V1_8822B) << BIT_SHIFT_IN_L1_V1_8822B) +#define BITS_IN_L1_V1_8822B \ + (BIT_MASK_IN_L1_V1_8822B << BIT_SHIFT_IN_L1_V1_8822B) +#define BIT_CLEAR_IN_L1_V1_8822B (x) ((x) & (~BITS_IN_L1_V1_8822B)) +#define BIT_GET_IN_L1_V1_8822B (x) \ + (((x) >> BIT_SHIFT_IN_L1_V1_8822B) & BIT_MASK_IN_L1_V1_8822B) +#define BIT_SET_IN_L1_V1_8822B (x, v) \ + (BIT_CLEAR_IN_L1_V1_8822B(x) | BIT_IN_L1_V1_8822B(v)) + +#define BIT_SHIFT_TBOX_L1_8822B 15 +#define BIT_MASK_TBOX_L1_8822B 0x3 +#define BIT_TBOX_L1_8822B (x) \ + (((x) & BIT_MASK_TBOX_L1_8822B) << BIT_SHIFT_TBOX_L1_8822B) +#define BITS_TBOX_L1_8822B (BIT_MASK_TBOX_L1_8822B << BIT_SHIFT_TBOX_L1_8822B) +#define BIT_CLEAR_TBOX_L1_8822B (x) ((x) & (~BITS_TBOX_L1_8822B)) +#define BIT_GET_TBOX_L1_8822B (x) \ + (((x) >> BIT_SHIFT_TBOX_L1_8822B) & BIT_MASK_TBOX_L1_8822B) +#define BIT_SET_TBOX_L1_8822B (x, v) \ + (BIT_CLEAR_TBOX_L1_8822B(x) | BIT_TBOX_L1_8822B(v)) + +#define BIT_SW18_SEL_8822B BIT(13) + +/* 2 REG_NOT_VALID_8822B */ +#define BIT_SW18_SD_8822B BIT(10) + +#define BIT_SHIFT_R3_L_8822B 7 +#define BIT_MASK_R3_L_8822B 0x3 +#define BIT_R3_L_8822B (x) (((x) & BIT_MASK_R3_L_8822B) << BIT_SHIFT_R3_L_8822B) +#define BITS_R3_L_8822B (BIT_MASK_R3_L_8822B << BIT_SHIFT_R3_L_8822B) +#define BIT_CLEAR_R3_L_8822B (x) ((x) & (~BITS_R3_L_8822B)) +#define BIT_GET_R3_L_8822B (x) \ + (((x) >> BIT_SHIFT_R3_L_8822B) & BIT_MASK_R3_L_8822B) +#define BIT_SET_R3_L_8822B (x, v) (BIT_CLEAR_R3_L_8822B(x) | BIT_R3_L_8822B(v)) + +#define BIT_SHIFT_SW18_R2_8822B 5 +#define BIT_MASK_SW18_R2_8822B 0x3 +#define BIT_SW18_R2_8822B (x) \ + (((x) & BIT_MASK_SW18_R2_8822B) << BIT_SHIFT_SW18_R2_8822B) +#define BITS_SW18_R2_8822B (BIT_MASK_SW18_R2_8822B << BIT_SHIFT_SW18_R2_8822B) +#define BIT_CLEAR_SW18_R2_8822B (x) ((x) & (~BITS_SW18_R2_8822B)) +#define BIT_GET_SW18_R2_8822B (x) \ + (((x) >> BIT_SHIFT_SW18_R2_8822B) & BIT_MASK_SW18_R2_8822B) +#define BIT_SET_SW18_R2_8822B (x, v) \ + (BIT_CLEAR_SW18_R2_8822B(x) | BIT_SW18_R2_8822B(v)) + +#define BIT_SHIFT_SW18_R1_8822B 3 +#define BIT_MASK_SW18_R1_8822B 0x3 +#define BIT_SW18_R1_8822B (x) \ + (((x) & BIT_MASK_SW18_R1_8822B) << BIT_SHIFT_SW18_R1_8822B) +#define BITS_SW18_R1_8822B (BIT_MASK_SW18_R1_8822B << BIT_SHIFT_SW18_R1_8822B) +#define BIT_CLEAR_SW18_R1_8822B (x) ((x) & (~BITS_SW18_R1_8822B)) +#define BIT_GET_SW18_R1_8822B (x) \ + (((x) >> BIT_SHIFT_SW18_R1_8822B) & BIT_MASK_SW18_R1_8822B) +#define BIT_SET_SW18_R1_8822B (x, v) \ + (BIT_CLEAR_SW18_R1_8822B(x) | BIT_SW18_R1_8822B(v)) + +#define BIT_SHIFT_C3_L_C3_8822B 1 +#define BIT_MASK_C3_L_C3_8822B 0x3 +#define BIT_C3_L_C3_8822B (x) \ + (((x) & BIT_MASK_C3_L_C3_8822B) << BIT_SHIFT_C3_L_C3_8822B) +#define BITS_C3_L_C3_8822B (BIT_MASK_C3_L_C3_8822B << BIT_SHIFT_C3_L_C3_8822B) +#define BIT_CLEAR_C3_L_C3_8822B (x) ((x) & (~BITS_C3_L_C3_8822B)) +#define BIT_GET_C3_L_C3_8822B (x) \ + (((x) >> BIT_SHIFT_C3_L_C3_8822B) & BIT_MASK_C3_L_C3_8822B) +#define BIT_SET_C3_L_C3_8822B (x, v) \ + (BIT_CLEAR_C3_L_C3_8822B(x) | BIT_C3_L_C3_8822B(v)) + +#define BIT_C2_L_BIT1_8822B BIT(0) + +/* 2 REG_SYS_SWR_CTRL3_8822B */ +#define BIT_SPS18_OCP_DIS_8822B BIT(31) + +#define BIT_SHIFT_SPS18_OCP_TH_8822B 16 +#define BIT_MASK_SPS18_OCP_TH_8822B 0x7fff +#define BIT_SPS18_OCP_TH_8822B (x) \ + (((x) & BIT_MASK_SPS18_OCP_TH_8822B) << BIT_SHIFT_SPS18_OCP_TH_8822B) +#define BITS_SPS18_OCP_TH_8822B \ + (BIT_MASK_SPS18_OCP_TH_8822B << BIT_SHIFT_SPS18_OCP_TH_8822B) +#define BIT_CLEAR_SPS18_OCP_TH_8822B (x) ((x) & (~BITS_SPS18_OCP_TH_8822B)) +#define BIT_GET_SPS18_OCP_TH_8822B (x) \ + (((x) >> BIT_SHIFT_SPS18_OCP_TH_8822B) & BIT_MASK_SPS18_OCP_TH_8822B) +#define BIT_SET_SPS18_OCP_TH_8822B (x, v) \ + (BIT_CLEAR_SPS18_OCP_TH_8822B(x) | BIT_SPS18_OCP_TH_8822B(v)) + +#define BIT_SHIFT_OCP_WINDOW_8822B 0 +#define BIT_MASK_OCP_WINDOW_8822B 0xffff +#define BIT_OCP_WINDOW_8822B (x) \ + (((x) & BIT_MASK_OCP_WINDOW_8822B) << BIT_SHIFT_OCP_WINDOW_8822B) +#define BITS_OCP_WINDOW_8822B \ + (BIT_MASK_OCP_WINDOW_8822B << BIT_SHIFT_OCP_WINDOW_8822B) +#define BIT_CLEAR_OCP_WINDOW_8822B (x) ((x) & (~BITS_OCP_WINDOW_8822B)) +#define BIT_GET_OCP_WINDOW_8822B (x) \ + (((x) >> BIT_SHIFT_OCP_WINDOW_8822B) & BIT_MASK_OCP_WINDOW_8822B) +#define BIT_SET_OCP_WINDOW_8822B (x, v) \ + (BIT_CLEAR_OCP_WINDOW_8822B(x) | BIT_OCP_WINDOW_8822B(v)) + +/* 2 REG_RSV_CTRL_8822B */ +#define BIT_HREG_DBG_8822B BIT(23) +#define BIT_WLMCUIOIF_8822B BIT(8) +#define BIT_LOCK_ALL_EN_8822B BIT(7) +#define BIT_R_DIS_PRST_8822B BIT(6) +#define BIT_WLOCK_1C_B6_8822B BIT(5) +#define BIT_WLOCK_40_8822B BIT(4) +#define BIT_WLOCK_08_8822B BIT(3) +#define BIT_WLOCK_04_8822B BIT(2) +#define BIT_WLOCK_00_8822B BIT(1) +#define BIT_WLOCK_ALL_8822B BIT(0) + +/* 2 REG_RF_CTRL_8822B */ +#define BIT_RF_SDMRSTB_8822B BIT(2) +#define BIT_RF_RSTB_8822B BIT(1) +#define BIT_RF_EN_8822B BIT(0) + +/* 2 REG_AFE_LDO_CTRL_8822B */ + +#define BIT_SHIFT_LPLDH12_RSV_8822B 29 +#define BIT_MASK_LPLDH12_RSV_8822B 0x7 +#define BIT_LPLDH12_RSV_8822B (x) \ + (((x) & BIT_MASK_LPLDH12_RSV_8822B) << BIT_SHIFT_LPLDH12_RSV_8822B) +#define BITS_LPLDH12_RSV_8822B \ + (BIT_MASK_LPLDH12_RSV_8822B << BIT_SHIFT_LPLDH12_RSV_8822B) +#define BIT_CLEAR_LPLDH12_RSV_8822B (x) ((x) & (~BITS_LPLDH12_RSV_8822B)) +#define BIT_GET_LPLDH12_RSV_8822B (x) \ + (((x) >> BIT_SHIFT_LPLDH12_RSV_8822B) & BIT_MASK_LPLDH12_RSV_8822B) +#define BIT_SET_LPLDH12_RSV_8822B (x, v) \ + (BIT_CLEAR_LPLDH12_RSV_8822B(x) | BIT_LPLDH12_RSV_8822B(v)) + +#define BIT_LPLDH12_SLP_8822B BIT(28) + +#define BIT_SHIFT_LPLDH12_VADJ_8822B 24 +#define BIT_MASK_LPLDH12_VADJ_8822B 0xf +#define BIT_LPLDH12_VADJ_8822B (x) \ + (((x) & BIT_MASK_LPLDH12_VADJ_8822B) << BIT_SHIFT_LPLDH12_VADJ_8822B) +#define BITS_LPLDH12_VADJ_8822B \ + (BIT_MASK_LPLDH12_VADJ_8822B << BIT_SHIFT_LPLDH12_VADJ_8822B) +#define BIT_CLEAR_LPLDH12_VADJ_8822B (x) ((x) & (~BITS_LPLDH12_VADJ_8822B)) +#define BIT_GET_LPLDH12_VADJ_8822B (x) \ + (((x) >> BIT_SHIFT_LPLDH12_VADJ_8822B) & BIT_MASK_LPLDH12_VADJ_8822B) +#define BIT_SET_LPLDH12_VADJ_8822B (x, v) \ + (BIT_CLEAR_LPLDH12_VADJ_8822B(x) | BIT_LPLDH12_VADJ_8822B(v)) + +#define BIT_LDH12_EN_8822B BIT(16) +#define BIT_WLBBOFF_BIG_PWC_EN_8822B BIT(14) +#define BIT_WLBBOFF_SMALL_PWC_EN_8822B BIT(13) +#define BIT_WLMACOFF_BIG_PWC_EN_8822B BIT(12) +#define BIT_WLPON_PWC_EN_8822B BIT(11) +#define BIT_POW_REGU_P1_8822B BIT(10) +#define BIT_LDOV12W_EN_8822B BIT(8) +#define BIT_EX_XTAL_DRV_DIGI_8822B BIT(7) +#define BIT_EX_XTAL_DRV_USB_8822B BIT(6) +#define BIT_EX_XTAL_DRV_AFE_8822B BIT(5) +#define BIT_EX_XTAL_DRV_RF2_8822B BIT(4) +#define BIT_EX_XTAL_DRV_RF1_8822B BIT(3) +#define BIT_POW_REGU_P0_8822B BIT(2) + +/* 2 REG_NOT_VALID_8822B */ +#define BIT_POW_PLL_LDO_8822B BIT(0) + +/* 2 REG_AFE_CTRL1_8822B */ +#define BIT_AGPIO_GPE_8822B BIT(31) + +#define BIT_SHIFT_XTAL_CAP_XI_8822B 25 +#define BIT_MASK_XTAL_CAP_XI_8822B 0x3f +#define BIT_XTAL_CAP_XI_8822B (x) \ + (((x) & BIT_MASK_XTAL_CAP_XI_8822B) << BIT_SHIFT_XTAL_CAP_XI_8822B) +#define BITS_XTAL_CAP_XI_8822B \ + (BIT_MASK_XTAL_CAP_XI_8822B << BIT_SHIFT_XTAL_CAP_XI_8822B) +#define BIT_CLEAR_XTAL_CAP_XI_8822B (x) ((x) & (~BITS_XTAL_CAP_XI_8822B)) +#define BIT_GET_XTAL_CAP_XI_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_CAP_XI_8822B) & BIT_MASK_XTAL_CAP_XI_8822B) +#define BIT_SET_XTAL_CAP_XI_8822B (x, v) \ + (BIT_CLEAR_XTAL_CAP_XI_8822B(x) | BIT_XTAL_CAP_XI_8822B(v)) + +#define BIT_SHIFT_XTAL_DRV_DIGI_8822B 23 +#define BIT_MASK_XTAL_DRV_DIGI_8822B 0x3 +#define BIT_XTAL_DRV_DIGI_8822B (x) \ + (((x) & BIT_MASK_XTAL_DRV_DIGI_8822B) << BIT_SHIFT_XTAL_DRV_DIGI_8822B) +#define BITS_XTAL_DRV_DIGI_8822B \ + (BIT_MASK_XTAL_DRV_DIGI_8822B << BIT_SHIFT_XTAL_DRV_DIGI_8822B) +#define BIT_CLEAR_XTAL_DRV_DIGI_8822B (x) ((x) & (~BITS_XTAL_DRV_DIGI_8822B)) +#define BIT_GET_XTAL_DRV_DIGI_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_DRV_DIGI_8822B) & BIT_MASK_XTAL_DRV_DIGI_8822B) +#define BIT_SET_XTAL_DRV_DIGI_8822B (x, v) \ + (BIT_CLEAR_XTAL_DRV_DIGI_8822B(x) | BIT_XTAL_DRV_DIGI_8822B(v)) + +#define BIT_XTAL_DRV_USB_BIT1_8822B BIT(22) + +#define BIT_SHIFT_MAC_CLK_SEL_8822B 20 +#define BIT_MASK_MAC_CLK_SEL_8822B 0x3 +#define BIT_MAC_CLK_SEL_8822B (x) \ + (((x) & BIT_MASK_MAC_CLK_SEL_8822B) << BIT_SHIFT_MAC_CLK_SEL_8822B) +#define BITS_MAC_CLK_SEL_8822B \ + (BIT_MASK_MAC_CLK_SEL_8822B << BIT_SHIFT_MAC_CLK_SEL_8822B) +#define BIT_CLEAR_MAC_CLK_SEL_8822B (x) ((x) & (~BITS_MAC_CLK_SEL_8822B)) +#define BIT_GET_MAC_CLK_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_MAC_CLK_SEL_8822B) & BIT_MASK_MAC_CLK_SEL_8822B) +#define BIT_SET_MAC_CLK_SEL_8822B (x, v) \ + (BIT_CLEAR_MAC_CLK_SEL_8822B(x) | BIT_MAC_CLK_SEL_8822B(v)) + +#define BIT_XTAL_DRV_USB_BIT0_8822B BIT(19) + +#define BIT_SHIFT_XTAL_DRV_AFE_8822B 17 +#define BIT_MASK_XTAL_DRV_AFE_8822B 0x3 +#define BIT_XTAL_DRV_AFE_8822B (x) \ + (((x) & BIT_MASK_XTAL_DRV_AFE_8822B) << BIT_SHIFT_XTAL_DRV_AFE_8822B) +#define BITS_XTAL_DRV_AFE_8822B \ + (BIT_MASK_XTAL_DRV_AFE_8822B << BIT_SHIFT_XTAL_DRV_AFE_8822B) +#define BIT_CLEAR_XTAL_DRV_AFE_8822B (x) ((x) & (~BITS_XTAL_DRV_AFE_8822B)) +#define BIT_GET_XTAL_DRV_AFE_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_DRV_AFE_8822B) & BIT_MASK_XTAL_DRV_AFE_8822B) +#define BIT_SET_XTAL_DRV_AFE_8822B (x, v) \ + (BIT_CLEAR_XTAL_DRV_AFE_8822B(x) | BIT_XTAL_DRV_AFE_8822B(v)) + +#define BIT_SHIFT_XTAL_DRV_RF2_8822B 15 +#define BIT_MASK_XTAL_DRV_RF2_8822B 0x3 +#define BIT_XTAL_DRV_RF2_8822B (x) \ + (((x) & BIT_MASK_XTAL_DRV_RF2_8822B) << BIT_SHIFT_XTAL_DRV_RF2_8822B) +#define BITS_XTAL_DRV_RF2_8822B \ + (BIT_MASK_XTAL_DRV_RF2_8822B << BIT_SHIFT_XTAL_DRV_RF2_8822B) +#define BIT_CLEAR_XTAL_DRV_RF2_8822B (x) ((x) & (~BITS_XTAL_DRV_RF2_8822B)) +#define BIT_GET_XTAL_DRV_RF2_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_DRV_RF2_8822B) & BIT_MASK_XTAL_DRV_RF2_8822B) +#define BIT_SET_XTAL_DRV_RF2_8822B (x, v) \ + (BIT_CLEAR_XTAL_DRV_RF2_8822B(x) | BIT_XTAL_DRV_RF2_8822B(v)) + +#define BIT_SHIFT_XTAL_DRV_RF1_8822B 13 +#define BIT_MASK_XTAL_DRV_RF1_8822B 0x3 +#define BIT_XTAL_DRV_RF1_8822B (x) \ + (((x) & BIT_MASK_XTAL_DRV_RF1_8822B) << BIT_SHIFT_XTAL_DRV_RF1_8822B) +#define BITS_XTAL_DRV_RF1_8822B \ + (BIT_MASK_XTAL_DRV_RF1_8822B << BIT_SHIFT_XTAL_DRV_RF1_8822B) +#define BIT_CLEAR_XTAL_DRV_RF1_8822B (x) ((x) & (~BITS_XTAL_DRV_RF1_8822B)) +#define BIT_GET_XTAL_DRV_RF1_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_DRV_RF1_8822B) & BIT_MASK_XTAL_DRV_RF1_8822B) +#define BIT_SET_XTAL_DRV_RF1_8822B (x, v) \ + (BIT_CLEAR_XTAL_DRV_RF1_8822B(x) | BIT_XTAL_DRV_RF1_8822B(v)) + +#define BIT_XTAL_DELAY_DIGI_8822B BIT(12) +#define BIT_XTAL_DELAY_USB_8822B BIT(11) +#define BIT_XTAL_DELAY_AFE_8822B BIT(10) + +#define BIT_SHIFT_XTAL_LDO_VREF_8822B 7 +#define BIT_MASK_XTAL_LDO_VREF_8822B 0x7 +#define BIT_XTAL_LDO_VREF_8822B (x) \ + (((x) & BIT_MASK_XTAL_LDO_VREF_8822B) << BIT_SHIFT_XTAL_LDO_VREF_8822B) +#define BITS_XTAL_LDO_VREF_8822B \ + (BIT_MASK_XTAL_LDO_VREF_8822B << BIT_SHIFT_XTAL_LDO_VREF_8822B) +#define BIT_CLEAR_XTAL_LDO_VREF_8822B (x) ((x) & (~BITS_XTAL_LDO_VREF_8822B)) +#define BIT_GET_XTAL_LDO_VREF_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_LDO_VREF_8822B) & BIT_MASK_XTAL_LDO_VREF_8822B) +#define BIT_SET_XTAL_LDO_VREF_8822B (x, v) \ + (BIT_CLEAR_XTAL_LDO_VREF_8822B(x) | BIT_XTAL_LDO_VREF_8822B(v)) + +#define BIT_XTAL_XQSEL_RF_8822B BIT(6) +#define BIT_XTAL_XQSEL_8822B BIT(5) + +#define BIT_SHIFT_XTAL_GMN_V2_8822B 3 +#define BIT_MASK_XTAL_GMN_V2_8822B 0x3 +#define BIT_XTAL_GMN_V2_8822B (x) \ + (((x) & BIT_MASK_XTAL_GMN_V2_8822B) << BIT_SHIFT_XTAL_GMN_V2_8822B) +#define BITS_XTAL_GMN_V2_8822B \ + (BIT_MASK_XTAL_GMN_V2_8822B << BIT_SHIFT_XTAL_GMN_V2_8822B) +#define BIT_CLEAR_XTAL_GMN_V2_8822B (x) ((x) & (~BITS_XTAL_GMN_V2_8822B)) +#define BIT_GET_XTAL_GMN_V2_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_GMN_V2_8822B) & BIT_MASK_XTAL_GMN_V2_8822B) +#define BIT_SET_XTAL_GMN_V2_8822B (x, v) \ + (BIT_CLEAR_XTAL_GMN_V2_8822B(x) | BIT_XTAL_GMN_V2_8822B(v)) + +#define BIT_SHIFT_XTAL_GMP_V2_8822B 1 +#define BIT_MASK_XTAL_GMP_V2_8822B 0x3 +#define BIT_XTAL_GMP_V2_8822B (x) \ + (((x) & BIT_MASK_XTAL_GMP_V2_8822B) << BIT_SHIFT_XTAL_GMP_V2_8822B) +#define BITS_XTAL_GMP_V2_8822B \ + (BIT_MASK_XTAL_GMP_V2_8822B << BIT_SHIFT_XTAL_GMP_V2_8822B) +#define BIT_CLEAR_XTAL_GMP_V2_8822B (x) ((x) & (~BITS_XTAL_GMP_V2_8822B)) +#define BIT_GET_XTAL_GMP_V2_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_GMP_V2_8822B) & BIT_MASK_XTAL_GMP_V2_8822B) +#define BIT_SET_XTAL_GMP_V2_8822B (x, v) \ + (BIT_CLEAR_XTAL_GMP_V2_8822B(x) | BIT_XTAL_GMP_V2_8822B(v)) + +#define BIT_XTAL_EN_8822B BIT(0) + +/* 2 REG_AFE_CTRL2_8822B */ + +#define BIT_SHIFT_REG_C3_V4_8822B 30 +#define BIT_MASK_REG_C3_V4_8822B 0x3 +#define BIT_REG_C3_V4_8822B (x) \ + (((x) & BIT_MASK_REG_C3_V4_8822B) << BIT_SHIFT_REG_C3_V4_8822B) +#define BITS_REG_C3_V4_8822B \ + (BIT_MASK_REG_C3_V4_8822B << BIT_SHIFT_REG_C3_V4_8822B) +#define BIT_CLEAR_REG_C3_V4_8822B (x) ((x) & (~BITS_REG_C3_V4_8822B)) +#define BIT_GET_REG_C3_V4_8822B (x) \ + (((x) >> BIT_SHIFT_REG_C3_V4_8822B) & BIT_MASK_REG_C3_V4_8822B) +#define BIT_SET_REG_C3_V4_8822B (x, v) \ + (BIT_CLEAR_REG_C3_V4_8822B(x) | BIT_REG_C3_V4_8822B(v)) + +#define BIT_REG_CP_BIT1_8822B BIT(29) + +#define BIT_SHIFT_REG_RS_V4_8822B 26 +#define BIT_MASK_REG_RS_V4_8822B 0x7 +#define BIT_REG_RS_V4_8822B (x) \ + (((x) & BIT_MASK_REG_RS_V4_8822B) << BIT_SHIFT_REG_RS_V4_8822B) +#define BITS_REG_RS_V4_8822B \ + (BIT_MASK_REG_RS_V4_8822B << BIT_SHIFT_REG_RS_V4_8822B) +#define BIT_CLEAR_REG_RS_V4_8822B (x) ((x) & (~BITS_REG_RS_V4_8822B)) +#define BIT_GET_REG_RS_V4_8822B (x) \ + (((x) >> BIT_SHIFT_REG_RS_V4_8822B) & BIT_MASK_REG_RS_V4_8822B) +#define BIT_SET_REG_RS_V4_8822B (x, v) \ + (BIT_CLEAR_REG_RS_V4_8822B(x) | BIT_REG_RS_V4_8822B(v)) + +#define BIT_SHIFT_REG__CS_8822B 24 +#define BIT_MASK_REG__CS_8822B 0x3 +#define BIT_REG__CS_8822B (x) \ + (((x) & BIT_MASK_REG__CS_8822B) << BIT_SHIFT_REG__CS_8822B) +#define BITS_REG__CS_8822B (BIT_MASK_REG__CS_8822B << BIT_SHIFT_REG__CS_8822B) +#define BIT_CLEAR_REG__CS_8822B (x) ((x) & (~BITS_REG__CS_8822B)) +#define BIT_GET_REG__CS_8822B (x) \ + (((x) >> BIT_SHIFT_REG__CS_8822B) & BIT_MASK_REG__CS_8822B) +#define BIT_SET_REG__CS_8822B (x, v) \ + (BIT_CLEAR_REG__CS_8822B(x) | BIT_REG__CS_8822B(v)) + +#define BIT_SHIFT_REG_CP_OFFSET_8822B 21 +#define BIT_MASK_REG_CP_OFFSET_8822B 0x7 +#define BIT_REG_CP_OFFSET_8822B (x) \ + (((x) & BIT_MASK_REG_CP_OFFSET_8822B) << BIT_SHIFT_REG_CP_OFFSET_8822B) +#define BITS_REG_CP_OFFSET_8822B \ + (BIT_MASK_REG_CP_OFFSET_8822B << BIT_SHIFT_REG_CP_OFFSET_8822B) +#define BIT_CLEAR_REG_CP_OFFSET_8822B (x) ((x) & (~BITS_REG_CP_OFFSET_8822B)) +#define BIT_GET_REG_CP_OFFSET_8822B (x) \ + (((x) >> BIT_SHIFT_REG_CP_OFFSET_8822B) & BIT_MASK_REG_CP_OFFSET_8822B) +#define BIT_SET_REG_CP_OFFSET_8822B (x, v) \ + (BIT_CLEAR_REG_CP_OFFSET_8822B(x) | BIT_REG_CP_OFFSET_8822B(v)) + +#define BIT_SHIFT_CP_BIAS_8822B 18 +#define BIT_MASK_CP_BIAS_8822B 0x7 +#define BIT_CP_BIAS_8822B (x) \ + (((x) & BIT_MASK_CP_BIAS_8822B) << BIT_SHIFT_CP_BIAS_8822B) +#define BITS_CP_BIAS_8822B (BIT_MASK_CP_BIAS_8822B << BIT_SHIFT_CP_BIAS_8822B) +#define BIT_CLEAR_CP_BIAS_8822B (x) ((x) & (~BITS_CP_BIAS_8822B)) +#define BIT_GET_CP_BIAS_8822B (x) \ + (((x) >> BIT_SHIFT_CP_BIAS_8822B) & BIT_MASK_CP_BIAS_8822B) +#define BIT_SET_CP_BIAS_8822B (x, v) \ + (BIT_CLEAR_CP_BIAS_8822B(x) | BIT_CP_BIAS_8822B(v)) + +#define BIT_REG_IDOUBLE_V2_8822B BIT(17) +#define BIT_EN_SYN_8822B BIT(16) + +#define BIT_SHIFT_MCCO_8822B 14 +#define BIT_MASK_MCCO_8822B 0x3 +#define BIT_MCCO_8822B (x) (((x) & BIT_MASK_MCCO_8822B) << BIT_SHIFT_MCCO_8822B) +#define BITS_MCCO_8822B (BIT_MASK_MCCO_8822B << BIT_SHIFT_MCCO_8822B) +#define BIT_CLEAR_MCCO_8822B (x) ((x) & (~BITS_MCCO_8822B)) +#define BIT_GET_MCCO_8822B (x) \ + (((x) >> BIT_SHIFT_MCCO_8822B) & BIT_MASK_MCCO_8822B) +#define BIT_SET_MCCO_8822B (x, v) (BIT_CLEAR_MCCO_8822B(x) | BIT_MCCO_8822B(v)) + +#define BIT_SHIFT_REG_LDO_SEL_8822B 12 +#define BIT_MASK_REG_LDO_SEL_8822B 0x3 +#define BIT_REG_LDO_SEL_8822B (x) \ + (((x) & BIT_MASK_REG_LDO_SEL_8822B) << BIT_SHIFT_REG_LDO_SEL_8822B) +#define BITS_REG_LDO_SEL_8822B \ + (BIT_MASK_REG_LDO_SEL_8822B << BIT_SHIFT_REG_LDO_SEL_8822B) +#define BIT_CLEAR_REG_LDO_SEL_8822B (x) ((x) & (~BITS_REG_LDO_SEL_8822B)) +#define BIT_GET_REG_LDO_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_REG_LDO_SEL_8822B) & BIT_MASK_REG_LDO_SEL_8822B) +#define BIT_SET_REG_LDO_SEL_8822B (x, v) \ + (BIT_CLEAR_REG_LDO_SEL_8822B(x) | BIT_REG_LDO_SEL_8822B(v)) + +#define BIT_REG_KVCO_V2_8822B BIT(10) +#define BIT_AGPIO_GPO_8822B BIT(9) + +#define BIT_SHIFT_AGPIO_DRV_8822B 7 +#define BIT_MASK_AGPIO_DRV_8822B 0x3 +#define BIT_AGPIO_DRV_8822B (x) \ + (((x) & BIT_MASK_AGPIO_DRV_8822B) << BIT_SHIFT_AGPIO_DRV_8822B) +#define BITS_AGPIO_DRV_8822B \ + (BIT_MASK_AGPIO_DRV_8822B << BIT_SHIFT_AGPIO_DRV_8822B) +#define BIT_CLEAR_AGPIO_DRV_8822B (x) ((x) & (~BITS_AGPIO_DRV_8822B)) +#define BIT_GET_AGPIO_DRV_8822B (x) \ + (((x) >> BIT_SHIFT_AGPIO_DRV_8822B) & BIT_MASK_AGPIO_DRV_8822B) +#define BIT_SET_AGPIO_DRV_8822B (x, v) \ + (BIT_CLEAR_AGPIO_DRV_8822B(x) | BIT_AGPIO_DRV_8822B(v)) + +#define BIT_SHIFT_XTAL_CAP_XO_8822B 1 +#define BIT_MASK_XTAL_CAP_XO_8822B 0x3f +#define BIT_XTAL_CAP_XO_8822B (x) \ + (((x) & BIT_MASK_XTAL_CAP_XO_8822B) << BIT_SHIFT_XTAL_CAP_XO_8822B) +#define BITS_XTAL_CAP_XO_8822B \ + (BIT_MASK_XTAL_CAP_XO_8822B << BIT_SHIFT_XTAL_CAP_XO_8822B) +#define BIT_CLEAR_XTAL_CAP_XO_8822B (x) ((x) & (~BITS_XTAL_CAP_XO_8822B)) +#define BIT_GET_XTAL_CAP_XO_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_CAP_XO_8822B) & BIT_MASK_XTAL_CAP_XO_8822B) +#define BIT_SET_XTAL_CAP_XO_8822B (x, v) \ + (BIT_CLEAR_XTAL_CAP_XO_8822B(x) | BIT_XTAL_CAP_XO_8822B(v)) + +#define BIT_POW_PLL_8822B BIT(0) + +/* 2 REG_AFE_CTRL3_8822B */ + +#define BIT_SHIFT_PS_8822B 7 +#define BIT_MASK_PS_8822B 0x7 +#define BIT_PS_8822B (x) (((x) & BIT_MASK_PS_8822B) << BIT_SHIFT_PS_8822B) +#define BITS_PS_8822B (BIT_MASK_PS_8822B << BIT_SHIFT_PS_8822B) +#define BIT_CLEAR_PS_8822B (x) ((x) & (~BITS_PS_8822B)) +#define BIT_GET_PS_8822B (x) (((x) >> BIT_SHIFT_PS_8822B) & BIT_MASK_PS_8822B) +#define BIT_SET_PS_8822B (x, v) (BIT_CLEAR_PS_8822B(x) | BIT_PS_8822B(v)) + +#define BIT_PSEN_8822B BIT(6) +#define BIT_DOGENB_8822B BIT(5) +#define BIT_REG_MBIAS_8822B BIT(4) + +#define BIT_SHIFT_REG_R3_V4_8822B 1 +#define BIT_MASK_REG_R3_V4_8822B 0x7 +#define BIT_REG_R3_V4_8822B (x) \ + (((x) & BIT_MASK_REG_R3_V4_8822B) << BIT_SHIFT_REG_R3_V4_8822B) +#define BITS_REG_R3_V4_8822B \ + (BIT_MASK_REG_R3_V4_8822B << BIT_SHIFT_REG_R3_V4_8822B) +#define BIT_CLEAR_REG_R3_V4_8822B (x) ((x) & (~BITS_REG_R3_V4_8822B)) +#define BIT_GET_REG_R3_V4_8822B (x) \ + (((x) >> BIT_SHIFT_REG_R3_V4_8822B) & BIT_MASK_REG_R3_V4_8822B) +#define BIT_SET_REG_R3_V4_8822B (x, v) \ + (BIT_CLEAR_REG_R3_V4_8822B(x) | BIT_REG_R3_V4_8822B(v)) + +#define BIT_REG_CP_BIT0_8822B BIT(0) + +/* 2 REG_EFUSE_CTRL_8822B */ +#define BIT_EF_FLAG_8822B BIT(31) + +#define BIT_SHIFT_EF_PGPD_8822B 28 +#define BIT_MASK_EF_PGPD_8822B 0x7 +#define BIT_EF_PGPD_8822B (x) \ + (((x) & BIT_MASK_EF_PGPD_8822B) << BIT_SHIFT_EF_PGPD_8822B) +#define BITS_EF_PGPD_8822B (BIT_MASK_EF_PGPD_8822B << BIT_SHIFT_EF_PGPD_8822B) +#define BIT_CLEAR_EF_PGPD_8822B (x) ((x) & (~BITS_EF_PGPD_8822B)) +#define BIT_GET_EF_PGPD_8822B (x) \ + (((x) >> BIT_SHIFT_EF_PGPD_8822B) & BIT_MASK_EF_PGPD_8822B) +#define BIT_SET_EF_PGPD_8822B (x, v) \ + (BIT_CLEAR_EF_PGPD_8822B(x) | BIT_EF_PGPD_8822B(v)) + +#define BIT_SHIFT_EF_RDT_8822B 24 +#define BIT_MASK_EF_RDT_8822B 0xf +#define BIT_EF_RDT_8822B (x) \ + (((x) & BIT_MASK_EF_RDT_8822B) << BIT_SHIFT_EF_RDT_8822B) +#define BITS_EF_RDT_8822B (BIT_MASK_EF_RDT_8822B << BIT_SHIFT_EF_RDT_8822B) +#define BIT_CLEAR_EF_RDT_8822B (x) ((x) & (~BITS_EF_RDT_8822B)) +#define BIT_GET_EF_RDT_8822B (x) \ + (((x) >> BIT_SHIFT_EF_RDT_8822B) & BIT_MASK_EF_RDT_8822B) +#define BIT_SET_EF_RDT_8822B (x, v) \ + (BIT_CLEAR_EF_RDT_8822B(x) | BIT_EF_RDT_8822B(v)) + +#define BIT_SHIFT_EF_PGTS_8822B 20 +#define BIT_MASK_EF_PGTS_8822B 0xf +#define BIT_EF_PGTS_8822B (x) \ + (((x) & BIT_MASK_EF_PGTS_8822B) << BIT_SHIFT_EF_PGTS_8822B) +#define BITS_EF_PGTS_8822B (BIT_MASK_EF_PGTS_8822B << BIT_SHIFT_EF_PGTS_8822B) +#define BIT_CLEAR_EF_PGTS_8822B (x) ((x) & (~BITS_EF_PGTS_8822B)) +#define BIT_GET_EF_PGTS_8822B (x) \ + (((x) >> BIT_SHIFT_EF_PGTS_8822B) & BIT_MASK_EF_PGTS_8822B) +#define BIT_SET_EF_PGTS_8822B (x, v) \ + (BIT_CLEAR_EF_PGTS_8822B(x) | BIT_EF_PGTS_8822B(v)) + +#define BIT_EF_PDWN_8822B BIT(19) +#define BIT_EF_ALDEN_8822B BIT(18) + +#define BIT_SHIFT_EF_ADDR_8822B 8 +#define BIT_MASK_EF_ADDR_8822B 0x3ff +#define BIT_EF_ADDR_8822B (x) \ + (((x) & BIT_MASK_EF_ADDR_8822B) << BIT_SHIFT_EF_ADDR_8822B) +#define BITS_EF_ADDR_8822B (BIT_MASK_EF_ADDR_8822B << BIT_SHIFT_EF_ADDR_8822B) +#define BIT_CLEAR_EF_ADDR_8822B (x) ((x) & (~BITS_EF_ADDR_8822B)) +#define BIT_GET_EF_ADDR_8822B (x) \ + (((x) >> BIT_SHIFT_EF_ADDR_8822B) & BIT_MASK_EF_ADDR_8822B) +#define BIT_SET_EF_ADDR_8822B (x, v) \ + (BIT_CLEAR_EF_ADDR_8822B(x) | BIT_EF_ADDR_8822B(v)) + +#define BIT_SHIFT_EF_DATA_8822B 0 +#define BIT_MASK_EF_DATA_8822B 0xff +#define BIT_EF_DATA_8822B (x) \ + (((x) & BIT_MASK_EF_DATA_8822B) << BIT_SHIFT_EF_DATA_8822B) +#define BITS_EF_DATA_8822B (BIT_MASK_EF_DATA_8822B << BIT_SHIFT_EF_DATA_8822B) +#define BIT_CLEAR_EF_DATA_8822B (x) ((x) & (~BITS_EF_DATA_8822B)) +#define BIT_GET_EF_DATA_8822B (x) \ + (((x) >> BIT_SHIFT_EF_DATA_8822B) & BIT_MASK_EF_DATA_8822B) +#define BIT_SET_EF_DATA_8822B (x, v) \ + (BIT_CLEAR_EF_DATA_8822B(x) | BIT_EF_DATA_8822B(v)) + +/* 2 REG_LDO_EFUSE_CTRL_8822B */ +#define BIT_LDOE25_EN_8822B BIT(31) + +#define BIT_SHIFT_LDOE25_V12ADJ_L_8822B 27 +#define BIT_MASK_LDOE25_V12ADJ_L_8822B 0xf +#define BIT_LDOE25_V12ADJ_L_8822B (x) \ + (((x) & BIT_MASK_LDOE25_V12ADJ_L_8822B) \ + << BIT_SHIFT_LDOE25_V12ADJ_L_8822B) +#define BITS_LDOE25_V12ADJ_L_8822B \ + (BIT_MASK_LDOE25_V12ADJ_L_8822B << BIT_SHIFT_LDOE25_V12ADJ_L_8822B) +#define BIT_CLEAR_LDOE25_V12ADJ_L_8822B (x) ((x) & (~BITS_LDOE25_V12ADJ_L_8822B)) +#define BIT_GET_LDOE25_V12ADJ_L_8822B (x) \ + (((x) >> BIT_SHIFT_LDOE25_V12ADJ_L_8822B) & \ + BIT_MASK_LDOE25_V12ADJ_L_8822B) +#define BIT_SET_LDOE25_V12ADJ_L_8822B (x, v) \ + (BIT_CLEAR_LDOE25_V12ADJ_L_8822B(x) | BIT_LDOE25_V12ADJ_L_8822B(v)) + +#define BIT_EF_CRES_SEL_8822B BIT(26) + +#define BIT_SHIFT_EF_SCAN_START_V1_8822B 16 +#define BIT_MASK_EF_SCAN_START_V1_8822B 0x3ff +#define BIT_EF_SCAN_START_V1_8822B (x) \ + (((x) & BIT_MASK_EF_SCAN_START_V1_8822B) \ + << BIT_SHIFT_EF_SCAN_START_V1_8822B) +#define BITS_EF_SCAN_START_V1_8822B \ + (BIT_MASK_EF_SCAN_START_V1_8822B << BIT_SHIFT_EF_SCAN_START_V1_8822B) +#define BIT_CLEAR_EF_SCAN_START_V1_8822B (x) \ + ((x) & (~BITS_EF_SCAN_START_V1_8822B)) +#define BIT_GET_EF_SCAN_START_V1_8822B (x) \ + (((x) >> BIT_SHIFT_EF_SCAN_START_V1_8822B) & \ + BIT_MASK_EF_SCAN_START_V1_8822B) +#define BIT_SET_EF_SCAN_START_V1_8822B (x, v) \ + (BIT_CLEAR_EF_SCAN_START_V1_8822B(x) | BIT_EF_SCAN_START_V1_8822B(v)) + +#define BIT_SHIFT_EF_SCAN_END_8822B 12 +#define BIT_MASK_EF_SCAN_END_8822B 0xf +#define BIT_EF_SCAN_END_8822B (x) \ + (((x) & BIT_MASK_EF_SCAN_END_8822B) << BIT_SHIFT_EF_SCAN_END_8822B) +#define BITS_EF_SCAN_END_8822B \ + (BIT_MASK_EF_SCAN_END_8822B << BIT_SHIFT_EF_SCAN_END_8822B) +#define BIT_CLEAR_EF_SCAN_END_8822B (x) ((x) & (~BITS_EF_SCAN_END_8822B)) +#define BIT_GET_EF_SCAN_END_8822B (x) \ + (((x) >> BIT_SHIFT_EF_SCAN_END_8822B) & BIT_MASK_EF_SCAN_END_8822B) +#define BIT_SET_EF_SCAN_END_8822B (x, v) \ + (BIT_CLEAR_EF_SCAN_END_8822B(x) | BIT_EF_SCAN_END_8822B(v)) + +#define BIT_EF_PD_DIS_8822B BIT(11) + +#define BIT_SHIFT_EF_CELL_SEL_8822B 8 +#define BIT_MASK_EF_CELL_SEL_8822B 0x3 +#define BIT_EF_CELL_SEL_8822B (x) \ + (((x) & BIT_MASK_EF_CELL_SEL_8822B) << BIT_SHIFT_EF_CELL_SEL_8822B) +#define BITS_EF_CELL_SEL_8822B \ + (BIT_MASK_EF_CELL_SEL_8822B << BIT_SHIFT_EF_CELL_SEL_8822B) +#define BIT_CLEAR_EF_CELL_SEL_8822B (x) ((x) & (~BITS_EF_CELL_SEL_8822B)) +#define BIT_GET_EF_CELL_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_EF_CELL_SEL_8822B) & BIT_MASK_EF_CELL_SEL_8822B) +#define BIT_SET_EF_CELL_SEL_8822B (x, v) \ + (BIT_CLEAR_EF_CELL_SEL_8822B(x) | BIT_EF_CELL_SEL_8822B(v)) + +#define BIT_EF_TRPT_8822B BIT(7) + +#define BIT_SHIFT_EF_TTHD_8822B 0 +#define BIT_MASK_EF_TTHD_8822B 0x7f +#define BIT_EF_TTHD_8822B (x) \ + (((x) & BIT_MASK_EF_TTHD_8822B) << BIT_SHIFT_EF_TTHD_8822B) +#define BITS_EF_TTHD_8822B (BIT_MASK_EF_TTHD_8822B << BIT_SHIFT_EF_TTHD_8822B) +#define BIT_CLEAR_EF_TTHD_8822B (x) ((x) & (~BITS_EF_TTHD_8822B)) +#define BIT_GET_EF_TTHD_8822B (x) \ + (((x) >> BIT_SHIFT_EF_TTHD_8822B) & BIT_MASK_EF_TTHD_8822B) +#define BIT_SET_EF_TTHD_8822B (x, v) \ + (BIT_CLEAR_EF_TTHD_8822B(x) | BIT_EF_TTHD_8822B(v)) + +/* 2 REG_PWR_OPTION_CTRL_8822B */ + +#define BIT_SHIFT_DBG_SEL_V1_8822B 16 +#define BIT_MASK_DBG_SEL_V1_8822B 0xff +#define BIT_DBG_SEL_V1_8822B (x) \ + (((x) & BIT_MASK_DBG_SEL_V1_8822B) << BIT_SHIFT_DBG_SEL_V1_8822B) +#define BITS_DBG_SEL_V1_8822B \ + (BIT_MASK_DBG_SEL_V1_8822B << BIT_SHIFT_DBG_SEL_V1_8822B) +#define BIT_CLEAR_DBG_SEL_V1_8822B (x) ((x) & (~BITS_DBG_SEL_V1_8822B)) +#define BIT_GET_DBG_SEL_V1_8822B (x) \ + (((x) >> BIT_SHIFT_DBG_SEL_V1_8822B) & BIT_MASK_DBG_SEL_V1_8822B) +#define BIT_SET_DBG_SEL_V1_8822B (x, v) \ + (BIT_CLEAR_DBG_SEL_V1_8822B(x) | BIT_DBG_SEL_V1_8822B(v)) + +#define BIT_SHIFT_DBG_SEL_BYTE_8822B 14 +#define BIT_MASK_DBG_SEL_BYTE_8822B 0x3 +#define BIT_DBG_SEL_BYTE_8822B (x) \ + (((x) & BIT_MASK_DBG_SEL_BYTE_8822B) << BIT_SHIFT_DBG_SEL_BYTE_8822B) +#define BITS_DBG_SEL_BYTE_8822B \ + (BIT_MASK_DBG_SEL_BYTE_8822B << BIT_SHIFT_DBG_SEL_BYTE_8822B) +#define BIT_CLEAR_DBG_SEL_BYTE_8822B (x) ((x) & (~BITS_DBG_SEL_BYTE_8822B)) +#define BIT_GET_DBG_SEL_BYTE_8822B (x) \ + (((x) >> BIT_SHIFT_DBG_SEL_BYTE_8822B) & BIT_MASK_DBG_SEL_BYTE_8822B) +#define BIT_SET_DBG_SEL_BYTE_8822B (x, v) \ + (BIT_CLEAR_DBG_SEL_BYTE_8822B(x) | BIT_DBG_SEL_BYTE_8822B(v)) + +#define BIT_SHIFT_STD_L1_V1_8822B 12 +#define BIT_MASK_STD_L1_V1_8822B 0x3 +#define BIT_STD_L1_V1_8822B (x) \ + (((x) & BIT_MASK_STD_L1_V1_8822B) << BIT_SHIFT_STD_L1_V1_8822B) +#define BITS_STD_L1_V1_8822B \ + (BIT_MASK_STD_L1_V1_8822B << BIT_SHIFT_STD_L1_V1_8822B) +#define BIT_CLEAR_STD_L1_V1_8822B (x) ((x) & (~BITS_STD_L1_V1_8822B)) +#define BIT_GET_STD_L1_V1_8822B (x) \ + (((x) >> BIT_SHIFT_STD_L1_V1_8822B) & BIT_MASK_STD_L1_V1_8822B) +#define BIT_SET_STD_L1_V1_8822B (x, v) \ + (BIT_CLEAR_STD_L1_V1_8822B(x) | BIT_STD_L1_V1_8822B(v)) + +#define BIT_SYSON_DBG_PAD_E2_8822B BIT(11) +#define BIT_SYSON_LED_PAD_E2_8822B BIT(10) +#define BIT_SYSON_GPEE_PAD_E2_8822B BIT(9) +#define BIT_SYSON_PCI_PAD_E2_8822B BIT(8) +#define BIT_AUTO_SW_LDO_VOL_EN_8822B BIT(7) + +#define BIT_SHIFT_SYSON_SPS0WWV_WT_8822B 4 +#define BIT_MASK_SYSON_SPS0WWV_WT_8822B 0x3 +#define BIT_SYSON_SPS0WWV_WT_8822B (x) \ + (((x) & BIT_MASK_SYSON_SPS0WWV_WT_8822B) \ + << BIT_SHIFT_SYSON_SPS0WWV_WT_8822B) +#define BITS_SYSON_SPS0WWV_WT_8822B \ + (BIT_MASK_SYSON_SPS0WWV_WT_8822B << BIT_SHIFT_SYSON_SPS0WWV_WT_8822B) +#define BIT_CLEAR_SYSON_SPS0WWV_WT_8822B (x) \ + ((x) & (~BITS_SYSON_SPS0WWV_WT_8822B)) +#define BIT_GET_SYSON_SPS0WWV_WT_8822B (x) \ + (((x) >> BIT_SHIFT_SYSON_SPS0WWV_WT_8822B) & \ + BIT_MASK_SYSON_SPS0WWV_WT_8822B) +#define BIT_SET_SYSON_SPS0WWV_WT_8822B (x, v) \ + (BIT_CLEAR_SYSON_SPS0WWV_WT_8822B(x) | BIT_SYSON_SPS0WWV_WT_8822B(v)) + +#define BIT_SHIFT_SYSON_SPS0LDO_WT_8822B 2 +#define BIT_MASK_SYSON_SPS0LDO_WT_8822B 0x3 +#define BIT_SYSON_SPS0LDO_WT_8822B (x) \ + (((x) & BIT_MASK_SYSON_SPS0LDO_WT_8822B) \ + << BIT_SHIFT_SYSON_SPS0LDO_WT_8822B) +#define BITS_SYSON_SPS0LDO_WT_8822B \ + (BIT_MASK_SYSON_SPS0LDO_WT_8822B << BIT_SHIFT_SYSON_SPS0LDO_WT_8822B) +#define BIT_CLEAR_SYSON_SPS0LDO_WT_8822B (x) \ + ((x) & (~BITS_SYSON_SPS0LDO_WT_8822B)) +#define BIT_GET_SYSON_SPS0LDO_WT_8822B (x) \ + (((x) >> BIT_SHIFT_SYSON_SPS0LDO_WT_8822B) & \ + BIT_MASK_SYSON_SPS0LDO_WT_8822B) +#define BIT_SET_SYSON_SPS0LDO_WT_8822B (x, v) \ + (BIT_CLEAR_SYSON_SPS0LDO_WT_8822B(x) | BIT_SYSON_SPS0LDO_WT_8822B(v)) + +#define BIT_SHIFT_SYSON_RCLK_SCALE_8822B 0 +#define BIT_MASK_SYSON_RCLK_SCALE_8822B 0x3 +#define BIT_SYSON_RCLK_SCALE_8822B (x) \ + (((x) & BIT_MASK_SYSON_RCLK_SCALE_8822B) \ + << BIT_SHIFT_SYSON_RCLK_SCALE_8822B) +#define BITS_SYSON_RCLK_SCALE_8822B \ + (BIT_MASK_SYSON_RCLK_SCALE_8822B << BIT_SHIFT_SYSON_RCLK_SCALE_8822B) +#define BIT_CLEAR_SYSON_RCLK_SCALE_8822B (x) \ + ((x) & (~BITS_SYSON_RCLK_SCALE_8822B)) +#define BIT_GET_SYSON_RCLK_SCALE_8822B (x) \ + (((x) >> BIT_SHIFT_SYSON_RCLK_SCALE_8822B) & \ + BIT_MASK_SYSON_RCLK_SCALE_8822B) +#define BIT_SET_SYSON_RCLK_SCALE_8822B (x, v) \ + (BIT_CLEAR_SYSON_RCLK_SCALE_8822B(x) | BIT_SYSON_RCLK_SCALE_8822B(v)) + +/* 2 REG_CAL_TIMER_8822B */ + +#define BIT_SHIFT_MATCH_CNT_8822B 8 +#define BIT_MASK_MATCH_CNT_8822B 0xff +#define BIT_MATCH_CNT_8822B (x) \ + (((x) & BIT_MASK_MATCH_CNT_8822B) << BIT_SHIFT_MATCH_CNT_8822B) +#define BITS_MATCH_CNT_8822B \ + (BIT_MASK_MATCH_CNT_8822B << BIT_SHIFT_MATCH_CNT_8822B) +#define BIT_CLEAR_MATCH_CNT_8822B (x) ((x) & (~BITS_MATCH_CNT_8822B)) +#define BIT_GET_MATCH_CNT_8822B (x) \ + (((x) >> BIT_SHIFT_MATCH_CNT_8822B) & BIT_MASK_MATCH_CNT_8822B) +#define BIT_SET_MATCH_CNT_8822B (x, v) \ + (BIT_CLEAR_MATCH_CNT_8822B(x) | BIT_MATCH_CNT_8822B(v)) + +#define BIT_SHIFT_CAL_SCAL_8822B 0 +#define BIT_MASK_CAL_SCAL_8822B 0xff +#define BIT_CAL_SCAL_8822B (x) \ + (((x) & BIT_MASK_CAL_SCAL_8822B) << BIT_SHIFT_CAL_SCAL_8822B) +#define BITS_CAL_SCAL_8822B \ + (BIT_MASK_CAL_SCAL_8822B << BIT_SHIFT_CAL_SCAL_8822B) +#define BIT_CLEAR_CAL_SCAL_8822B (x) ((x) & (~BITS_CAL_SCAL_8822B)) +#define BIT_GET_CAL_SCAL_8822B (x) \ + (((x) >> BIT_SHIFT_CAL_SCAL_8822B) & BIT_MASK_CAL_SCAL_8822B) +#define BIT_SET_CAL_SCAL_8822B (x, v) \ + (BIT_CLEAR_CAL_SCAL_8822B(x) | BIT_CAL_SCAL_8822B(v)) + +/* 2 REG_ACLK_MON_8822B */ + +#define BIT_SHIFT_RCLK_MON_8822B 5 +#define BIT_MASK_RCLK_MON_8822B 0x7ff +#define BIT_RCLK_MON_8822B (x) \ + (((x) & BIT_MASK_RCLK_MON_8822B) << BIT_SHIFT_RCLK_MON_8822B) +#define BITS_RCLK_MON_8822B \ + (BIT_MASK_RCLK_MON_8822B << BIT_SHIFT_RCLK_MON_8822B) +#define BIT_CLEAR_RCLK_MON_8822B (x) ((x) & (~BITS_RCLK_MON_8822B)) +#define BIT_GET_RCLK_MON_8822B (x) \ + (((x) >> BIT_SHIFT_RCLK_MON_8822B) & BIT_MASK_RCLK_MON_8822B) +#define BIT_SET_RCLK_MON_8822B (x, v) \ + (BIT_CLEAR_RCLK_MON_8822B(x) | BIT_RCLK_MON_8822B(v)) + +#define BIT_CAL_EN_8822B BIT(4) + +#define BIT_SHIFT_DPSTU_8822B 2 +#define BIT_MASK_DPSTU_8822B 0x3 +#define BIT_DPSTU_8822B (x) \ + (((x) & BIT_MASK_DPSTU_8822B) << BIT_SHIFT_DPSTU_8822B) +#define BITS_DPSTU_8822B (BIT_MASK_DPSTU_8822B << BIT_SHIFT_DPSTU_8822B) +#define BIT_CLEAR_DPSTU_8822B (x) ((x) & (~BITS_DPSTU_8822B)) +#define BIT_GET_DPSTU_8822B (x) \ + (((x) >> BIT_SHIFT_DPSTU_8822B) & BIT_MASK_DPSTU_8822B) +#define BIT_SET_DPSTU_8822B (x, v) \ + (BIT_CLEAR_DPSTU_8822B(x) | BIT_DPSTU_8822B(v)) + +#define BIT_SUS_16X_8822B BIT(1) + +/* 2 REG_GPIO_MUXCFG_8822B */ +#define BIT_FSPI_EN_8822B BIT(19) +#define BIT_WL_RTS_EXT_32K_SEL_8822B BIT(18) +#define BIT_WLGP_SPI_EN_8822B BIT(16) +#define BIT_SIC_LBK_8822B BIT(15) +#define BIT_ENHTP_8822B BIT(14) +#define BIT_ENSIC_8822B BIT(12) +#define BIT_SIC_SWRST_8822B BIT(11) +#define BIT_PO_WIFI_PTA_PINS_8822B BIT(10) +#define BIT_PO_BT_PTA_PINS_8822B BIT(9) +#define BIT_ENUART_8822B BIT(8) + +#define BIT_SHIFT_BTMODE_8822B 6 +#define BIT_MASK_BTMODE_8822B 0x3 +#define BIT_BTMODE_8822B (x) \ + (((x) & BIT_MASK_BTMODE_8822B) << BIT_SHIFT_BTMODE_8822B) +#define BITS_BTMODE_8822B (BIT_MASK_BTMODE_8822B << BIT_SHIFT_BTMODE_8822B) +#define BIT_CLEAR_BTMODE_8822B (x) ((x) & (~BITS_BTMODE_8822B)) +#define BIT_GET_BTMODE_8822B (x) \ + (((x) >> BIT_SHIFT_BTMODE_8822B) & BIT_MASK_BTMODE_8822B) +#define BIT_SET_BTMODE_8822B (x, v) \ + (BIT_CLEAR_BTMODE_8822B(x) | BIT_BTMODE_8822B(v)) + +#define BIT_ENBT_8822B BIT(5) +#define BIT_EROM_EN_8822B BIT(4) +#define BIT_WLRFE_6_7_EN_8822B BIT(3) +#define BIT_WLRFE_4_5_EN_8822B BIT(2) + +#define BIT_SHIFT_GPIOSEL_8822B 0 +#define BIT_MASK_GPIOSEL_8822B 0x3 +#define BIT_GPIOSEL_8822B (x) \ + (((x) & BIT_MASK_GPIOSEL_8822B) << BIT_SHIFT_GPIOSEL_8822B) +#define BITS_GPIOSEL_8822B (BIT_MASK_GPIOSEL_8822B << BIT_SHIFT_GPIOSEL_8822B) +#define BIT_CLEAR_GPIOSEL_8822B (x) ((x) & (~BITS_GPIOSEL_8822B)) +#define BIT_GET_GPIOSEL_8822B (x) \ + (((x) >> BIT_SHIFT_GPIOSEL_8822B) & BIT_MASK_GPIOSEL_8822B) +#define BIT_SET_GPIOSEL_8822B (x, v) \ + (BIT_CLEAR_GPIOSEL_8822B(x) | BIT_GPIOSEL_8822B(v)) + +/* 2 REG_GPIO_PIN_CTRL_8822B */ + +#define BIT_SHIFT_GPIO_MOD_7_TO_0_8822B 24 +#define BIT_MASK_GPIO_MOD_7_TO_0_8822B 0xff +#define BIT_GPIO_MOD_7_TO_0_8822B (x) \ + (((x) & BIT_MASK_GPIO_MOD_7_TO_0_8822B) \ + << BIT_SHIFT_GPIO_MOD_7_TO_0_8822B) +#define BITS_GPIO_MOD_7_TO_0_8822B \ + (BIT_MASK_GPIO_MOD_7_TO_0_8822B << BIT_SHIFT_GPIO_MOD_7_TO_0_8822B) +#define BIT_CLEAR_GPIO_MOD_7_TO_0_8822B (x) ((x) & (~BITS_GPIO_MOD_7_TO_0_8822B)) +#define BIT_GET_GPIO_MOD_7_TO_0_8822B (x) \ + (((x) >> BIT_SHIFT_GPIO_MOD_7_TO_0_8822B) & \ + BIT_MASK_GPIO_MOD_7_TO_0_8822B) +#define BIT_SET_GPIO_MOD_7_TO_0_8822B (x, v) \ + (BIT_CLEAR_GPIO_MOD_7_TO_0_8822B(x) | BIT_GPIO_MOD_7_TO_0_8822B(v)) + +#define BIT_SHIFT_GPIO_IO_SEL_7_TO_0_8822B 16 +#define BIT_MASK_GPIO_IO_SEL_7_TO_0_8822B 0xff +#define BIT_GPIO_IO_SEL_7_TO_0_8822B (x) \ + (((x) & BIT_MASK_GPIO_IO_SEL_7_TO_0_8822B) \ + << BIT_SHIFT_GPIO_IO_SEL_7_TO_0_8822B) +#define BITS_GPIO_IO_SEL_7_TO_0_8822B \ + (BIT_MASK_GPIO_IO_SEL_7_TO_0_8822B \ + << BIT_SHIFT_GPIO_IO_SEL_7_TO_0_8822B) +#define BIT_CLEAR_GPIO_IO_SEL_7_TO_0_8822B (x) \ + ((x) & (~BITS_GPIO_IO_SEL_7_TO_0_8822B)) +#define BIT_GET_GPIO_IO_SEL_7_TO_0_8822B (x) \ + (((x) >> BIT_SHIFT_GPIO_IO_SEL_7_TO_0_8822B) & \ + BIT_MASK_GPIO_IO_SEL_7_TO_0_8822B) +#define BIT_SET_GPIO_IO_SEL_7_TO_0_8822B (x, v) \ + (BIT_CLEAR_GPIO_IO_SEL_7_TO_0_8822B(x) | \ + BIT_GPIO_IO_SEL_7_TO_0_8822B(v)) + +#define BIT_SHIFT_GPIO_OUT_7_TO_0_8822B 8 +#define BIT_MASK_GPIO_OUT_7_TO_0_8822B 0xff +#define BIT_GPIO_OUT_7_TO_0_8822B (x) \ + (((x) & BIT_MASK_GPIO_OUT_7_TO_0_8822B) \ + << BIT_SHIFT_GPIO_OUT_7_TO_0_8822B) +#define BITS_GPIO_OUT_7_TO_0_8822B \ + (BIT_MASK_GPIO_OUT_7_TO_0_8822B << BIT_SHIFT_GPIO_OUT_7_TO_0_8822B) +#define BIT_CLEAR_GPIO_OUT_7_TO_0_8822B (x) ((x) & (~BITS_GPIO_OUT_7_TO_0_8822B)) +#define BIT_GET_GPIO_OUT_7_TO_0_8822B (x) \ + (((x) >> BIT_SHIFT_GPIO_OUT_7_TO_0_8822B) & \ + BIT_MASK_GPIO_OUT_7_TO_0_8822B) +#define BIT_SET_GPIO_OUT_7_TO_0_8822B (x, v) \ + (BIT_CLEAR_GPIO_OUT_7_TO_0_8822B(x) | BIT_GPIO_OUT_7_TO_0_8822B(v)) + +#define BIT_SHIFT_GPIO_IN_7_TO_0_8822B 0 +#define BIT_MASK_GPIO_IN_7_TO_0_8822B 0xff +#define BIT_GPIO_IN_7_TO_0_8822B (x) \ + (((x) & BIT_MASK_GPIO_IN_7_TO_0_8822B) \ + << BIT_SHIFT_GPIO_IN_7_TO_0_8822B) +#define BITS_GPIO_IN_7_TO_0_8822B \ + (BIT_MASK_GPIO_IN_7_TO_0_8822B << BIT_SHIFT_GPIO_IN_7_TO_0_8822B) +#define BIT_CLEAR_GPIO_IN_7_TO_0_8822B (x) ((x) & (~BITS_GPIO_IN_7_TO_0_8822B)) +#define BIT_GET_GPIO_IN_7_TO_0_8822B (x) \ + (((x) >> BIT_SHIFT_GPIO_IN_7_TO_0_8822B) & \ + BIT_MASK_GPIO_IN_7_TO_0_8822B) +#define BIT_SET_GPIO_IN_7_TO_0_8822B (x, v) \ + (BIT_CLEAR_GPIO_IN_7_TO_0_8822B(x) | BIT_GPIO_IN_7_TO_0_8822B(v)) + +/* 2 REG_GPIO_INTM_8822B */ + +#define BIT_SHIFT_MUXDBG_SEL_8822B 30 +#define BIT_MASK_MUXDBG_SEL_8822B 0x3 +#define BIT_MUXDBG_SEL_8822B (x) \ + (((x) & BIT_MASK_MUXDBG_SEL_8822B) << BIT_SHIFT_MUXDBG_SEL_8822B) +#define BITS_MUXDBG_SEL_8822B \ + (BIT_MASK_MUXDBG_SEL_8822B << BIT_SHIFT_MUXDBG_SEL_8822B) +#define BIT_CLEAR_MUXDBG_SEL_8822B (x) ((x) & (~BITS_MUXDBG_SEL_8822B)) +#define BIT_GET_MUXDBG_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_MUXDBG_SEL_8822B) & BIT_MASK_MUXDBG_SEL_8822B) +#define BIT_SET_MUXDBG_SEL_8822B (x, v) \ + (BIT_CLEAR_MUXDBG_SEL_8822B(x) | BIT_MUXDBG_SEL_8822B(v)) + +#define BIT_EXTWOL_SEL_8822B BIT(17) +#define BIT_EXTWOL_EN_8822B BIT(16) +#define BIT_GPIOF_INT_MD_8822B BIT(15) +#define BIT_GPIOE_INT_MD_8822B BIT(14) +#define BIT_GPIOD_INT_MD_8822B BIT(13) +#define BIT_GPIOF_INT_MD_8822B BIT(15) +#define BIT_GPIOE_INT_MD_8822B BIT(14) +#define BIT_GPIOD_INT_MD_8822B BIT(13) +#define BIT_GPIOC_INT_MD_8822B BIT(12) +#define BIT_GPIOB_INT_MD_8822B BIT(11) +#define BIT_GPIOA_INT_MD_8822B BIT(10) +#define BIT_GPIO9_INT_MD_8822B BIT(9) +#define BIT_GPIO8_INT_MD_8822B BIT(8) +#define BIT_GPIO7_INT_MD_8822B BIT(7) +#define BIT_GPIO6_INT_MD_8822B BIT(6) +#define BIT_GPIO5_INT_MD_8822B BIT(5) +#define BIT_GPIO4_INT_MD_8822B BIT(4) +#define BIT_GPIO3_INT_MD_8822B BIT(3) +#define BIT_GPIO2_INT_MD_8822B BIT(2) +#define BIT_GPIO1_INT_MD_8822B BIT(1) +#define BIT_GPIO0_INT_MD_8822B BIT(0) + +/* 2 REG_LED_CFG_8822B */ +#define BIT_GPIO3_WL_CTRL_EN_8822B BIT(27) +#define BIT_LNAON_SEL_EN_8822B BIT(26) +#define BIT_PAPE_SEL_EN_8822B BIT(25) +#define BIT_DPDT_WLBT_SEL_8822B BIT(24) +#define BIT_DPDT_SEL_EN_8822B BIT(23) +#define BIT_GPIO13_14_WL_CTRL_EN_8822B BIT(22) +#define BIT_GPIO13_14_WL_CTRL_EN_8822B BIT(22) +#define BIT_LED2DIS_8822B BIT(21) +#define BIT_LED2PL_8822B BIT(20) +#define BIT_LED2SV_8822B BIT(19) + +#define BIT_SHIFT_LED2CM_8822B 16 +#define BIT_MASK_LED2CM_8822B 0x7 +#define BIT_LED2CM_8822B (x) \ + (((x) & BIT_MASK_LED2CM_8822B) << BIT_SHIFT_LED2CM_8822B) +#define BITS_LED2CM_8822B (BIT_MASK_LED2CM_8822B << BIT_SHIFT_LED2CM_8822B) +#define BIT_CLEAR_LED2CM_8822B (x) ((x) & (~BITS_LED2CM_8822B)) +#define BIT_GET_LED2CM_8822B (x) \ + (((x) >> BIT_SHIFT_LED2CM_8822B) & BIT_MASK_LED2CM_8822B) +#define BIT_SET_LED2CM_8822B (x, v) \ + (BIT_CLEAR_LED2CM_8822B(x) | BIT_LED2CM_8822B(v)) + +#define BIT_LED1DIS_8822B BIT(15) +#define BIT_LED1PL_8822B BIT(12) +#define BIT_LED1SV_8822B BIT(11) + +#define BIT_SHIFT_LED1CM_8822B 8 +#define BIT_MASK_LED1CM_8822B 0x7 +#define BIT_LED1CM_8822B (x) \ + (((x) & BIT_MASK_LED1CM_8822B) << BIT_SHIFT_LED1CM_8822B) +#define BITS_LED1CM_8822B (BIT_MASK_LED1CM_8822B << BIT_SHIFT_LED1CM_8822B) +#define BIT_CLEAR_LED1CM_8822B (x) ((x) & (~BITS_LED1CM_8822B)) +#define BIT_GET_LED1CM_8822B (x) \ + (((x) >> BIT_SHIFT_LED1CM_8822B) & BIT_MASK_LED1CM_8822B) +#define BIT_SET_LED1CM_8822B (x, v) \ + (BIT_CLEAR_LED1CM_8822B(x) | BIT_LED1CM_8822B(v)) + +#define BIT_LED0DIS_8822B BIT(7) + +#define BIT_SHIFT_AFE_LDO_SWR_CHECK_8822B 5 +#define BIT_MASK_AFE_LDO_SWR_CHECK_8822B 0x3 +#define BIT_AFE_LDO_SWR_CHECK_8822B (x) \ + (((x) & BIT_MASK_AFE_LDO_SWR_CHECK_8822B) \ + << BIT_SHIFT_AFE_LDO_SWR_CHECK_8822B) +#define BITS_AFE_LDO_SWR_CHECK_8822B \ + (BIT_MASK_AFE_LDO_SWR_CHECK_8822B << BIT_SHIFT_AFE_LDO_SWR_CHECK_8822B) +#define BIT_CLEAR_AFE_LDO_SWR_CHECK_8822B (x) \ + ((x) & (~BITS_AFE_LDO_SWR_CHECK_8822B)) +#define BIT_GET_AFE_LDO_SWR_CHECK_8822B (x) \ + (((x) >> BIT_SHIFT_AFE_LDO_SWR_CHECK_8822B) & \ + BIT_MASK_AFE_LDO_SWR_CHECK_8822B) +#define BIT_SET_AFE_LDO_SWR_CHECK_8822B (x, v) \ + (BIT_CLEAR_AFE_LDO_SWR_CHECK_8822B(x) | BIT_AFE_LDO_SWR_CHECK_8822B(v)) + +#define BIT_LED0PL_8822B BIT(4) +#define BIT_LED0SV_8822B BIT(3) + +#define BIT_SHIFT_LED0CM_8822B 0 +#define BIT_MASK_LED0CM_8822B 0x7 +#define BIT_LED0CM_8822B (x) \ + (((x) & BIT_MASK_LED0CM_8822B) << BIT_SHIFT_LED0CM_8822B) +#define BITS_LED0CM_8822B (BIT_MASK_LED0CM_8822B << BIT_SHIFT_LED0CM_8822B) +#define BIT_CLEAR_LED0CM_8822B (x) ((x) & (~BITS_LED0CM_8822B)) +#define BIT_GET_LED0CM_8822B (x) \ + (((x) >> BIT_SHIFT_LED0CM_8822B) & BIT_MASK_LED0CM_8822B) +#define BIT_SET_LED0CM_8822B (x, v) \ + (BIT_CLEAR_LED0CM_8822B(x) | BIT_LED0CM_8822B(v)) + +/* 2 REG_FSIMR_8822B */ +#define BIT_FS_PDNINT_EN_8822B BIT(31) +#define BIT_NFC_INT_PAD_EN_8822B BIT(30) +#define BIT_FS_SPS_OCP_INT_EN_8822B BIT(29) +#define BIT_FS_PWMERR_INT_EN_8822B BIT(28) +#define BIT_FS_GPIOF_INT_EN_8822B BIT(27) +#define BIT_FS_GPIOE_INT_EN_8822B BIT(26) +#define BIT_FS_GPIOD_INT_EN_8822B BIT(25) +#define BIT_FS_GPIOC_INT_EN_8822B BIT(24) +#define BIT_FS_GPIOB_INT_EN_8822B BIT(23) +#define BIT_FS_GPIOA_INT_EN_8822B BIT(22) +#define BIT_FS_GPIO9_INT_EN_8822B BIT(21) +#define BIT_FS_GPIO8_INT_EN_8822B BIT(20) +#define BIT_FS_GPIO7_INT_EN_8822B BIT(19) +#define BIT_FS_GPIO6_INT_EN_8822B BIT(18) +#define BIT_FS_GPIO5_INT_EN_8822B BIT(17) +#define BIT_FS_GPIO4_INT_EN_8822B BIT(16) +#define BIT_FS_GPIO3_INT_EN_8822B BIT(15) +#define BIT_FS_GPIO2_INT_EN_8822B BIT(14) +#define BIT_FS_GPIO1_INT_EN_8822B BIT(13) +#define BIT_FS_GPIO0_INT_EN_8822B BIT(12) +#define BIT_FS_HCI_SUS_EN_8822B BIT(11) +#define BIT_FS_HCI_RES_EN_8822B BIT(10) +#define BIT_FS_HCI_RESET_EN_8822B BIT(9) +#define BIT_FS_BTON_STS_UPDATE_MSK_EN_8822B BIT(7) +#define BIT_ACT2RECOVERY_INT_EN_V1_8822B BIT(6) +#define BIT_GEN1GEN2_SWITCH_8822B BIT(5) +#define BIT_HCI_TXDMA_REQ_HIMR_8822B BIT(4) +#define BIT_FS_32K_LEAVE_SETTING_MAK_8822B BIT(3) +#define BIT_FS_32K_ENTER_SETTING_MAK_8822B BIT(2) +#define BIT_FS_USB_LPMRSM_MSK_8822B BIT(1) +#define BIT_FS_USB_LPMINT_MSK_8822B BIT(0) + +/* 2 REG_FSISR_8822B */ +#define BIT_FS_PDNINT_8822B BIT(31) +#define BIT_FS_SPS_OCP_INT_8822B BIT(29) +#define BIT_FS_PWMERR_INT_8822B BIT(28) +#define BIT_FS_GPIOF_INT_8822B BIT(27) +#define BIT_FS_GPIOE_INT_8822B BIT(26) +#define BIT_FS_GPIOD_INT_8822B BIT(25) +#define BIT_FS_GPIOC_INT_8822B BIT(24) +#define BIT_FS_GPIOB_INT_8822B BIT(23) +#define BIT_FS_GPIOA_INT_8822B BIT(22) +#define BIT_FS_GPIO9_INT_8822B BIT(21) +#define BIT_FS_GPIO8_INT_8822B BIT(20) +#define BIT_FS_GPIO7_INT_8822B BIT(19) +#define BIT_FS_GPIO6_INT_8822B BIT(18) +#define BIT_FS_GPIO5_INT_8822B BIT(17) +#define BIT_FS_GPIO4_INT_8822B BIT(16) +#define BIT_FS_GPIO3_INT_8822B BIT(15) +#define BIT_FS_GPIO2_INT_8822B BIT(14) +#define BIT_FS_GPIO1_INT_8822B BIT(13) +#define BIT_FS_GPIO0_INT_8822B BIT(12) +#define BIT_FS_HCI_SUS_INT_8822B BIT(11) +#define BIT_FS_HCI_RES_INT_8822B BIT(10) +#define BIT_FS_HCI_RESET_INT_8822B BIT(9) +#define BIT_ACT2RECOVERY_8822B BIT(6) +#define BIT_GEN1GEN2_SWITCH_8822B BIT(5) +#define BIT_HCI_TXDMA_REQ_HISR_8822B BIT(4) +#define BIT_FS_32K_LEAVE_SETTING_INT_8822B BIT(3) +#define BIT_FS_32K_ENTER_SETTING_INT_8822B BIT(2) +#define BIT_FS_USB_LPMRSM_INT_8822B BIT(1) +#define BIT_FS_USB_LPMINT_INT_8822B BIT(0) + +/* 2 REG_HSIMR_8822B */ +#define BIT_GPIOF_INT_EN_8822B BIT(31) +#define BIT_GPIOE_INT_EN_8822B BIT(30) +#define BIT_GPIOD_INT_EN_8822B BIT(29) +#define BIT_GPIOC_INT_EN_8822B BIT(28) +#define BIT_GPIOB_INT_EN_8822B BIT(27) +#define BIT_GPIOA_INT_EN_8822B BIT(26) +#define BIT_GPIO9_INT_EN_8822B BIT(25) +#define BIT_GPIO8_INT_EN_8822B BIT(24) +#define BIT_GPIO7_INT_EN_8822B BIT(23) +#define BIT_GPIO6_INT_EN_8822B BIT(22) +#define BIT_GPIO5_INT_EN_8822B BIT(21) +#define BIT_GPIO4_INT_EN_8822B BIT(20) +#define BIT_GPIO3_INT_EN_8822B BIT(19) +#define BIT_GPIO2_INT_EN_V1_8822B BIT(18) +#define BIT_GPIO1_INT_EN_8822B BIT(17) +#define BIT_GPIO0_INT_EN_8822B BIT(16) +#define BIT_PDNINT_EN_8822B BIT(7) +#define BIT_RON_INT_EN_8822B BIT(6) +#define BIT_SPS_OCP_INT_EN_8822B BIT(5) +#define BIT_GPIO15_0_INT_EN_8822B BIT(0) + +/* 2 REG_HSISR_8822B */ +#define BIT_GPIOF_INT_8822B BIT(31) +#define BIT_GPIOE_INT_8822B BIT(30) +#define BIT_GPIOD_INT_8822B BIT(29) +#define BIT_GPIOC_INT_8822B BIT(28) +#define BIT_GPIOB_INT_8822B BIT(27) +#define BIT_GPIOA_INT_8822B BIT(26) +#define BIT_GPIO9_INT_8822B BIT(25) +#define BIT_GPIO8_INT_8822B BIT(24) +#define BIT_GPIO7_INT_8822B BIT(23) +#define BIT_GPIO6_INT_8822B BIT(22) +#define BIT_GPIO5_INT_8822B BIT(21) +#define BIT_GPIO4_INT_8822B BIT(20) +#define BIT_GPIO3_INT_8822B BIT(19) +#define BIT_GPIO2_INT_V1_8822B BIT(18) +#define BIT_GPIO1_INT_8822B BIT(17) +#define BIT_GPIO0_INT_8822B BIT(16) +#define BIT_PDNINT_8822B BIT(7) +#define BIT_RON_INT_8822B BIT(6) +#define BIT_SPS_OCP_INT_8822B BIT(5) +#define BIT_GPIO15_0_INT_8822B BIT(0) + +/* 2 REG_GPIO_EXT_CTRL_8822B */ + +#define BIT_SHIFT_GPIO_MOD_15_TO_8_8822B 24 +#define BIT_MASK_GPIO_MOD_15_TO_8_8822B 0xff +#define BIT_GPIO_MOD_15_TO_8_8822B (x) \ + (((x) & BIT_MASK_GPIO_MOD_15_TO_8_8822B) \ + << BIT_SHIFT_GPIO_MOD_15_TO_8_8822B) +#define BITS_GPIO_MOD_15_TO_8_8822B \ + (BIT_MASK_GPIO_MOD_15_TO_8_8822B << BIT_SHIFT_GPIO_MOD_15_TO_8_8822B) +#define BIT_CLEAR_GPIO_MOD_15_TO_8_8822B (x) \ + ((x) & (~BITS_GPIO_MOD_15_TO_8_8822B)) +#define BIT_GET_GPIO_MOD_15_TO_8_8822B (x) \ + (((x) >> BIT_SHIFT_GPIO_MOD_15_TO_8_8822B) & \ + BIT_MASK_GPIO_MOD_15_TO_8_8822B) +#define BIT_SET_GPIO_MOD_15_TO_8_8822B (x, v) \ + (BIT_CLEAR_GPIO_MOD_15_TO_8_8822B(x) | BIT_GPIO_MOD_15_TO_8_8822B(v)) + +#define BIT_SHIFT_GPIO_IO_SEL_15_TO_8_8822B 16 +#define BIT_MASK_GPIO_IO_SEL_15_TO_8_8822B 0xff +#define BIT_GPIO_IO_SEL_15_TO_8_8822B (x) \ + (((x) & BIT_MASK_GPIO_IO_SEL_15_TO_8_8822B) \ + << BIT_SHIFT_GPIO_IO_SEL_15_TO_8_8822B) +#define BITS_GPIO_IO_SEL_15_TO_8_8822B \ + (BIT_MASK_GPIO_IO_SEL_15_TO_8_8822B \ + << BIT_SHIFT_GPIO_IO_SEL_15_TO_8_8822B) +#define BIT_CLEAR_GPIO_IO_SEL_15_TO_8_8822B (x) \ + ((x) & (~BITS_GPIO_IO_SEL_15_TO_8_8822B)) +#define BIT_GET_GPIO_IO_SEL_15_TO_8_8822B (x) \ + (((x) >> BIT_SHIFT_GPIO_IO_SEL_15_TO_8_8822B) & \ + BIT_MASK_GPIO_IO_SEL_15_TO_8_8822B) +#define BIT_SET_GPIO_IO_SEL_15_TO_8_8822B (x, v) \ + (BIT_CLEAR_GPIO_IO_SEL_15_TO_8_8822B(x) | \ + BIT_GPIO_IO_SEL_15_TO_8_8822B(v)) + +#define BIT_SHIFT_GPIO_OUT_15_TO_8_8822B 8 +#define BIT_MASK_GPIO_OUT_15_TO_8_8822B 0xff +#define BIT_GPIO_OUT_15_TO_8_8822B (x) \ + (((x) & BIT_MASK_GPIO_OUT_15_TO_8_8822B) \ + << BIT_SHIFT_GPIO_OUT_15_TO_8_8822B) +#define BITS_GPIO_OUT_15_TO_8_8822B \ + (BIT_MASK_GPIO_OUT_15_TO_8_8822B << BIT_SHIFT_GPIO_OUT_15_TO_8_8822B) +#define BIT_CLEAR_GPIO_OUT_15_TO_8_8822B (x) \ + ((x) & (~BITS_GPIO_OUT_15_TO_8_8822B)) +#define BIT_GET_GPIO_OUT_15_TO_8_8822B (x) \ + (((x) >> BIT_SHIFT_GPIO_OUT_15_TO_8_8822B) & \ + BIT_MASK_GPIO_OUT_15_TO_8_8822B) +#define BIT_SET_GPIO_OUT_15_TO_8_8822B (x, v) \ + (BIT_CLEAR_GPIO_OUT_15_TO_8_8822B(x) | BIT_GPIO_OUT_15_TO_8_8822B(v)) + +#define BIT_SHIFT_GPIO_IN_15_TO_8_8822B 0 +#define BIT_MASK_GPIO_IN_15_TO_8_8822B 0xff +#define BIT_GPIO_IN_15_TO_8_8822B (x) \ + (((x) & BIT_MASK_GPIO_IN_15_TO_8_8822B) \ + << BIT_SHIFT_GPIO_IN_15_TO_8_8822B) +#define BITS_GPIO_IN_15_TO_8_8822B \ + (BIT_MASK_GPIO_IN_15_TO_8_8822B << BIT_SHIFT_GPIO_IN_15_TO_8_8822B) +#define BIT_CLEAR_GPIO_IN_15_TO_8_8822B (x) ((x) & (~BITS_GPIO_IN_15_TO_8_8822B)) +#define BIT_GET_GPIO_IN_15_TO_8_8822B (x) \ + (((x) >> BIT_SHIFT_GPIO_IN_15_TO_8_8822B) & \ + BIT_MASK_GPIO_IN_15_TO_8_8822B) +#define BIT_SET_GPIO_IN_15_TO_8_8822B (x, v) \ + (BIT_CLEAR_GPIO_IN_15_TO_8_8822B(x) | BIT_GPIO_IN_15_TO_8_8822B(v)) + +/* 2 REG_PAD_CTRL1_8822B */ +#define BIT_PAPE_WLBT_SEL_8822B BIT(29) +#define BIT_LNAON_WLBT_SEL_8822B BIT(28) +#define BIT_BTGP_GPG3_FEN_8822B BIT(26) +#define BIT_BTGP_GPG2_FEN_8822B BIT(25) +#define BIT_BTGP_JTAG_EN_8822B BIT(24) +#define BIT_XTAL_CLK_EXTARNAL_EN_8822B BIT(23) +#define BIT_BTGP_UART0_EN_8822B BIT(22) +#define BIT_BTGP_UART1_EN_8822B BIT(21) +#define BIT_BTGP_SPI_EN_8822B BIT(20) +#define BIT_BTGP_GPIO_E2_8822B BIT(19) +#define BIT_BTGP_GPIO_EN_8822B BIT(18) + +#define BIT_SHIFT_BTGP_GPIO_SL_8822B 16 +#define BIT_MASK_BTGP_GPIO_SL_8822B 0x3 +#define BIT_BTGP_GPIO_SL_8822B (x) \ + (((x) & BIT_MASK_BTGP_GPIO_SL_8822B) << BIT_SHIFT_BTGP_GPIO_SL_8822B) +#define BITS_BTGP_GPIO_SL_8822B \ + (BIT_MASK_BTGP_GPIO_SL_8822B << BIT_SHIFT_BTGP_GPIO_SL_8822B) +#define BIT_CLEAR_BTGP_GPIO_SL_8822B (x) ((x) & (~BITS_BTGP_GPIO_SL_8822B)) +#define BIT_GET_BTGP_GPIO_SL_8822B (x) \ + (((x) >> BIT_SHIFT_BTGP_GPIO_SL_8822B) & BIT_MASK_BTGP_GPIO_SL_8822B) +#define BIT_SET_BTGP_GPIO_SL_8822B (x, v) \ + (BIT_CLEAR_BTGP_GPIO_SL_8822B(x) | BIT_BTGP_GPIO_SL_8822B(v)) + +#define BIT_PAD_SDIO_SR_8822B BIT(14) +#define BIT_GPIO14_OUTPUT_PL_8822B BIT(13) +#define BIT_HOST_WAKE_PAD_PULL_EN_8822B BIT(12) +#define BIT_HOST_WAKE_PAD_SL_8822B BIT(11) +#define BIT_PAD_LNAON_SR_8822B BIT(10) +#define BIT_PAD_LNAON_E2_8822B BIT(9) +#define BIT_SW_LNAON_G_SEL_DATA_8822B BIT(8) +#define BIT_SW_LNAON_A_SEL_DATA_8822B BIT(7) +#define BIT_PAD_PAPE_SR_8822B BIT(6) +#define BIT_PAD_PAPE_E2_8822B BIT(5) +#define BIT_SW_PAPE_G_SEL_DATA_8822B BIT(4) +#define BIT_SW_PAPE_A_SEL_DATA_8822B BIT(3) +#define BIT_PAD_DPDT_SR_8822B BIT(2) +#define BIT_PAD_DPDT_PAD_E2_8822B BIT(1) +#define BIT_SW_DPDT_SEL_DATA_8822B BIT(0) + +/* 2 REG_WL_BT_PWR_CTRL_8822B */ +#define BIT_ISO_BD2PP_8822B BIT(31) +#define BIT_LDOV12B_EN_8822B BIT(30) +#define BIT_CKEN_BTGPS_8822B BIT(29) +#define BIT_FEN_BTGPS_8822B BIT(28) +#define BIT_BTCPU_BOOTSEL_8822B BIT(27) +#define BIT_SPI_SPEEDUP_8822B BIT(26) +#define BIT_DEVWAKE_PAD_TYPE_SEL_8822B BIT(24) +#define BIT_CLKREQ_PAD_TYPE_SEL_8822B BIT(23) +#define BIT_ISO_BTPON2PP_8822B BIT(22) +#define BIT_BT_HWROF_EN_8822B BIT(19) +#define BIT_BT_FUNC_EN_8822B BIT(18) +#define BIT_BT_HWPDN_SL_8822B BIT(17) +#define BIT_BT_DISN_EN_8822B BIT(16) +#define BIT_BT_PDN_PULL_EN_8822B BIT(15) +#define BIT_WL_PDN_PULL_EN_8822B BIT(14) +#define BIT_EXTERNAL_REQUEST_PL_8822B BIT(13) +#define BIT_GPIO0_2_3_PULL_LOW_EN_8822B BIT(12) +#define BIT_ISO_BA2PP_8822B BIT(11) +#define BIT_BT_AFE_LDO_EN_8822B BIT(10) +#define BIT_BT_AFE_PLL_EN_8822B BIT(9) +#define BIT_BT_DIG_CLK_EN_8822B BIT(8) +#define BIT_WL_DRV_EXIST_IDX_8822B BIT(5) +#define BIT_DOP_EHPAD_8822B BIT(4) +#define BIT_WL_HWROF_EN_8822B BIT(3) +#define BIT_WL_FUNC_EN_8822B BIT(2) +#define BIT_WL_HWPDN_SL_8822B BIT(1) +#define BIT_WL_HWPDN_EN_8822B BIT(0) + +/* 2 REG_SDM_DEBUG_8822B */ + +#define BIT_SHIFT_WLCLK_PHASE_8822B 0 +#define BIT_MASK_WLCLK_PHASE_8822B 0x1f +#define BIT_WLCLK_PHASE_8822B (x) \ + (((x) & BIT_MASK_WLCLK_PHASE_8822B) << BIT_SHIFT_WLCLK_PHASE_8822B) +#define BITS_WLCLK_PHASE_8822B \ + (BIT_MASK_WLCLK_PHASE_8822B << BIT_SHIFT_WLCLK_PHASE_8822B) +#define BIT_CLEAR_WLCLK_PHASE_8822B (x) ((x) & (~BITS_WLCLK_PHASE_8822B)) +#define BIT_GET_WLCLK_PHASE_8822B (x) \ + (((x) >> BIT_SHIFT_WLCLK_PHASE_8822B) & BIT_MASK_WLCLK_PHASE_8822B) +#define BIT_SET_WLCLK_PHASE_8822B (x, v) \ + (BIT_CLEAR_WLCLK_PHASE_8822B(x) | BIT_WLCLK_PHASE_8822B(v)) + +/* 2 REG_SYS_SDIO_CTRL_8822B */ +#define BIT_DBG_GNT_WL_BT_8822B BIT(27) +#define BIT_LTE_MUX_CTRL_PATH_8822B BIT(26) +#define BIT_LTE_COEX_UART_8822B BIT(25) +#define BIT_3W_LTE_WL_GPIO_8822B BIT(24) +#define BIT_SDIO_INT_POLARITY_8822B BIT(19) +#define BIT_SDIO_INT_8822B BIT(18) +#define BIT_SDIO_OFF_EN_8822B BIT(17) +#define BIT_SDIO_ON_EN_8822B BIT(16) +#define BIT_PCIE_WAIT_TIMEOUT_EVENT_8822B BIT(10) +#define BIT_PCIE_WAIT_TIME_8822B BIT(9) +#define BIT_MPCIE_REFCLK_XTAL_SEL_8822B BIT(8) + +#define BIT_SHIFT_SI_AUTHORIZATION_8822B 0 +#define BIT_MASK_SI_AUTHORIZATION_8822B 0xff +#define BIT_SI_AUTHORIZATION_8822B (x) \ + (((x) & BIT_MASK_SI_AUTHORIZATION_8822B) \ + << BIT_SHIFT_SI_AUTHORIZATION_8822B) +#define BITS_SI_AUTHORIZATION_8822B \ + (BIT_MASK_SI_AUTHORIZATION_8822B << BIT_SHIFT_SI_AUTHORIZATION_8822B) +#define BIT_CLEAR_SI_AUTHORIZATION_8822B (x) \ + ((x) & (~BITS_SI_AUTHORIZATION_8822B)) +#define BIT_GET_SI_AUTHORIZATION_8822B (x) \ + (((x) >> BIT_SHIFT_SI_AUTHORIZATION_8822B) & \ + BIT_MASK_SI_AUTHORIZATION_8822B) +#define BIT_SET_SI_AUTHORIZATION_8822B (x, v) \ + (BIT_CLEAR_SI_AUTHORIZATION_8822B(x) | BIT_SI_AUTHORIZATION_8822B(v)) + +/* 2 REG_HCI_OPT_CTRL_8822B */ + +#define BIT_SHIFT_TSFT_SEL_8822B 29 +#define BIT_MASK_TSFT_SEL_8822B 0x7 +#define BIT_TSFT_SEL_8822B (x) \ + (((x) & BIT_MASK_TSFT_SEL_8822B) << BIT_SHIFT_TSFT_SEL_8822B) +#define BITS_TSFT_SEL_8822B \ + (BIT_MASK_TSFT_SEL_8822B << BIT_SHIFT_TSFT_SEL_8822B) +#define BIT_CLEAR_TSFT_SEL_8822B (x) ((x) & (~BITS_TSFT_SEL_8822B)) +#define BIT_GET_TSFT_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_TSFT_SEL_8822B) & BIT_MASK_TSFT_SEL_8822B) +#define BIT_SET_TSFT_SEL_8822B (x, v) \ + (BIT_CLEAR_TSFT_SEL_8822B(x) | BIT_TSFT_SEL_8822B(v)) + +#define BIT_USB_HOST_PWR_OFF_EN_8822B BIT(12) +#define BIT_SYM_LPS_BLOCK_EN_8822B BIT(11) +#define BIT_USB_LPM_ACT_EN_8822B BIT(10) +#define BIT_USB_LPM_NY_8822B BIT(9) +#define BIT_USB_SUS_DIS_8822B BIT(8) + +#define BIT_SHIFT_SDIO_PAD_E_8822B 5 +#define BIT_MASK_SDIO_PAD_E_8822B 0x7 +#define BIT_SDIO_PAD_E_8822B (x) \ + (((x) & BIT_MASK_SDIO_PAD_E_8822B) << BIT_SHIFT_SDIO_PAD_E_8822B) +#define BITS_SDIO_PAD_E_8822B \ + (BIT_MASK_SDIO_PAD_E_8822B << BIT_SHIFT_SDIO_PAD_E_8822B) +#define BIT_CLEAR_SDIO_PAD_E_8822B (x) ((x) & (~BITS_SDIO_PAD_E_8822B)) +#define BIT_GET_SDIO_PAD_E_8822B (x) \ + (((x) >> BIT_SHIFT_SDIO_PAD_E_8822B) & BIT_MASK_SDIO_PAD_E_8822B) +#define BIT_SET_SDIO_PAD_E_8822B (x, v) \ + (BIT_CLEAR_SDIO_PAD_E_8822B(x) | BIT_SDIO_PAD_E_8822B(v)) + +#define BIT_USB_LPPLL_EN_8822B BIT(4) +#define BIT_ROP_SW15_8822B BIT(2) +#define BIT_PCI_CKRDY_OPT_8822B BIT(1) +#define BIT_PCI_VAUX_EN_8822B BIT(0) + +/* 2 REG_AFE_CTRL4_8822B */ + +/* 2 REG_LDO_SWR_CTRL_8822B */ +#define BIT_ZCD_HW_AUTO_EN_8822B BIT(27) +#define BIT_ZCD_REGSEL_8822B BIT(26) + +#define BIT_SHIFT_AUTO_ZCD_IN_CODE_8822B 21 +#define BIT_MASK_AUTO_ZCD_IN_CODE_8822B 0x1f +#define BIT_AUTO_ZCD_IN_CODE_8822B (x) \ + (((x) & BIT_MASK_AUTO_ZCD_IN_CODE_8822B) \ + << BIT_SHIFT_AUTO_ZCD_IN_CODE_8822B) +#define BITS_AUTO_ZCD_IN_CODE_8822B \ + (BIT_MASK_AUTO_ZCD_IN_CODE_8822B << BIT_SHIFT_AUTO_ZCD_IN_CODE_8822B) +#define BIT_CLEAR_AUTO_ZCD_IN_CODE_8822B (x) \ + ((x) & (~BITS_AUTO_ZCD_IN_CODE_8822B)) +#define BIT_GET_AUTO_ZCD_IN_CODE_8822B (x) \ + (((x) >> BIT_SHIFT_AUTO_ZCD_IN_CODE_8822B) & \ + BIT_MASK_AUTO_ZCD_IN_CODE_8822B) +#define BIT_SET_AUTO_ZCD_IN_CODE_8822B (x, v) \ + (BIT_CLEAR_AUTO_ZCD_IN_CODE_8822B(x) | BIT_AUTO_ZCD_IN_CODE_8822B(v)) + +#define BIT_SHIFT_ZCD_CODE_IN_L_8822B 16 +#define BIT_MASK_ZCD_CODE_IN_L_8822B 0x1f +#define BIT_ZCD_CODE_IN_L_8822B (x) \ + (((x) & BIT_MASK_ZCD_CODE_IN_L_8822B) << BIT_SHIFT_ZCD_CODE_IN_L_8822B) +#define BITS_ZCD_CODE_IN_L_8822B \ + (BIT_MASK_ZCD_CODE_IN_L_8822B << BIT_SHIFT_ZCD_CODE_IN_L_8822B) +#define BIT_CLEAR_ZCD_CODE_IN_L_8822B (x) ((x) & (~BITS_ZCD_CODE_IN_L_8822B)) +#define BIT_GET_ZCD_CODE_IN_L_8822B (x) \ + (((x) >> BIT_SHIFT_ZCD_CODE_IN_L_8822B) & BIT_MASK_ZCD_CODE_IN_L_8822B) +#define BIT_SET_ZCD_CODE_IN_L_8822B (x, v) \ + (BIT_CLEAR_ZCD_CODE_IN_L_8822B(x) | BIT_ZCD_CODE_IN_L_8822B(v)) + +#define BIT_SHIFT_LDO_HV5_DUMMY_8822B 14 +#define BIT_MASK_LDO_HV5_DUMMY_8822B 0x3 +#define BIT_LDO_HV5_DUMMY_8822B (x) \ + (((x) & BIT_MASK_LDO_HV5_DUMMY_8822B) << BIT_SHIFT_LDO_HV5_DUMMY_8822B) +#define BITS_LDO_HV5_DUMMY_8822B \ + (BIT_MASK_LDO_HV5_DUMMY_8822B << BIT_SHIFT_LDO_HV5_DUMMY_8822B) +#define BIT_CLEAR_LDO_HV5_DUMMY_8822B (x) ((x) & (~BITS_LDO_HV5_DUMMY_8822B)) +#define BIT_GET_LDO_HV5_DUMMY_8822B (x) \ + (((x) >> BIT_SHIFT_LDO_HV5_DUMMY_8822B) & BIT_MASK_LDO_HV5_DUMMY_8822B) +#define BIT_SET_LDO_HV5_DUMMY_8822B (x, v) \ + (BIT_CLEAR_LDO_HV5_DUMMY_8822B(x) | BIT_LDO_HV5_DUMMY_8822B(v)) + +#define BIT_SHIFT_REG_VTUNE33_BIT0_TO_BIT1_8822B 12 +#define BIT_MASK_REG_VTUNE33_BIT0_TO_BIT1_8822B 0x3 +#define BIT_REG_VTUNE33_BIT0_TO_BIT1_8822B (x) \ + (((x) & BIT_MASK_REG_VTUNE33_BIT0_TO_BIT1_8822B) \ + << BIT_SHIFT_REG_VTUNE33_BIT0_TO_BIT1_8822B) +#define BITS_REG_VTUNE33_BIT0_TO_BIT1_8822B \ + (BIT_MASK_REG_VTUNE33_BIT0_TO_BIT1_8822B \ + << BIT_SHIFT_REG_VTUNE33_BIT0_TO_BIT1_8822B) +#define BIT_CLEAR_REG_VTUNE33_BIT0_TO_BIT1_8822B (x) \ + ((x) & (~BITS_REG_VTUNE33_BIT0_TO_BIT1_8822B)) +#define BIT_GET_REG_VTUNE33_BIT0_TO_BIT1_8822B (x) \ + (((x) >> BIT_SHIFT_REG_VTUNE33_BIT0_TO_BIT1_8822B) & \ + BIT_MASK_REG_VTUNE33_BIT0_TO_BIT1_8822B) +#define BIT_SET_REG_VTUNE33_BIT0_TO_BIT1_8822B (x, v) \ + (BIT_CLEAR_REG_VTUNE33_BIT0_TO_BIT1_8822B(x) | \ + BIT_REG_VTUNE33_BIT0_TO_BIT1_8822B(v)) + +#define BIT_SHIFT_REG_STANDBY33_BIT0_TO_BIT1_8822B 10 +#define BIT_MASK_REG_STANDBY33_BIT0_TO_BIT1_8822B 0x3 +#define BIT_REG_STANDBY33_BIT0_TO_BIT1_8822B (x) \ + (((x) & BIT_MASK_REG_STANDBY33_BIT0_TO_BIT1_8822B) \ + << BIT_SHIFT_REG_STANDBY33_BIT0_TO_BIT1_8822B) +#define BITS_REG_STANDBY33_BIT0_TO_BIT1_8822B \ + (BIT_MASK_REG_STANDBY33_BIT0_TO_BIT1_8822B \ + << BIT_SHIFT_REG_STANDBY33_BIT0_TO_BIT1_8822B) +#define BIT_CLEAR_REG_STANDBY33_BIT0_TO_BIT1_8822B (x) \ + ((x) & (~BITS_REG_STANDBY33_BIT0_TO_BIT1_8822B)) +#define BIT_GET_REG_STANDBY33_BIT0_TO_BIT1_8822B (x) \ + (((x) >> BIT_SHIFT_REG_STANDBY33_BIT0_TO_BIT1_8822B) & \ + BIT_MASK_REG_STANDBY33_BIT0_TO_BIT1_8822B) +#define BIT_SET_REG_STANDBY33_BIT0_TO_BIT1_8822B (x, v) \ + (BIT_CLEAR_REG_STANDBY33_BIT0_TO_BIT1_8822B(x) | \ + BIT_REG_STANDBY33_BIT0_TO_BIT1_8822B(v)) + +#define BIT_SHIFT_REG_LOAD33_BIT0_TO_BIT1_8822B 8 +#define BIT_MASK_REG_LOAD33_BIT0_TO_BIT1_8822B 0x3 +#define BIT_REG_LOAD33_BIT0_TO_BIT1_8822B (x) \ + (((x) & BIT_MASK_REG_LOAD33_BIT0_TO_BIT1_8822B) \ + << BIT_SHIFT_REG_LOAD33_BIT0_TO_BIT1_8822B) +#define BITS_REG_LOAD33_BIT0_TO_BIT1_8822B \ + (BIT_MASK_REG_LOAD33_BIT0_TO_BIT1_8822B \ + << BIT_SHIFT_REG_LOAD33_BIT0_TO_BIT1_8822B) +#define BIT_CLEAR_REG_LOAD33_BIT0_TO_BIT1_8822B (x) \ + ((x) & (~BITS_REG_LOAD33_BIT0_TO_BIT1_8822B)) +#define BIT_GET_REG_LOAD33_BIT0_TO_BIT1_8822B (x) \ + (((x) >> BIT_SHIFT_REG_LOAD33_BIT0_TO_BIT1_8822B) & \ + BIT_MASK_REG_LOAD33_BIT0_TO_BIT1_8822B) +#define BIT_SET_REG_LOAD33_BIT0_TO_BIT1_8822B (x, v) \ + (BIT_CLEAR_REG_LOAD33_BIT0_TO_BIT1_8822B(x) | \ + BIT_REG_LOAD33_BIT0_TO_BIT1_8822B(v)) + +#define BIT_REG_BYPASS_L_8822B BIT(7) +#define BIT_REG_LDOF_L_8822B BIT(6) +#define BIT_REG_TYPE_L_V1_8822B BIT(5) +#define BIT_ARENB_L_8822B BIT(3) + +#define BIT_SHIFT_CFC_L_8822B 1 +#define BIT_MASK_CFC_L_8822B 0x3 +#define BIT_CFC_L_8822B (x) \ + (((x) & BIT_MASK_CFC_L_8822B) << BIT_SHIFT_CFC_L_8822B) +#define BITS_CFC_L_8822B (BIT_MASK_CFC_L_8822B << BIT_SHIFT_CFC_L_8822B) +#define BIT_CLEAR_CFC_L_8822B (x) ((x) & (~BITS_CFC_L_8822B)) +#define BIT_GET_CFC_L_8822B (x) \ + (((x) >> BIT_SHIFT_CFC_L_8822B) & BIT_MASK_CFC_L_8822B) +#define BIT_SET_CFC_L_8822B (x, v) \ + (BIT_CLEAR_CFC_L_8822B(x) | BIT_CFC_L_8822B(v)) + +#define BIT_REG_OCPS_L_V1_8822B BIT(0) + +/* 2 REG_MCUFW_CTRL_8822B */ + +#define BIT_SHIFT_RPWM_8822B 24 +#define BIT_MASK_RPWM_8822B 0xff +#define BIT_RPWM_8822B (x) (((x) & BIT_MASK_RPWM_8822B) << BIT_SHIFT_RPWM_8822B) +#define BITS_RPWM_8822B (BIT_MASK_RPWM_8822B << BIT_SHIFT_RPWM_8822B) +#define BIT_CLEAR_RPWM_8822B (x) ((x) & (~BITS_RPWM_8822B)) +#define BIT_GET_RPWM_8822B (x) \ + (((x) >> BIT_SHIFT_RPWM_8822B) & BIT_MASK_RPWM_8822B) +#define BIT_SET_RPWM_8822B (x, v) (BIT_CLEAR_RPWM_8822B(x) | BIT_RPWM_8822B(v)) + +#define BIT_ANA_PORT_EN_8822B BIT(22) +#define BIT_MAC_PORT_EN_8822B BIT(21) +#define BIT_BOOT_FSPI_EN_8822B BIT(20) +#define BIT_ROM_DLEN_8822B BIT(19) + +#define BIT_SHIFT_ROM_PGE_8822B 16 +#define BIT_MASK_ROM_PGE_8822B 0x7 +#define BIT_ROM_PGE_8822B (x) \ + (((x) & BIT_MASK_ROM_PGE_8822B) << BIT_SHIFT_ROM_PGE_8822B) +#define BITS_ROM_PGE_8822B (BIT_MASK_ROM_PGE_8822B << BIT_SHIFT_ROM_PGE_8822B) +#define BIT_CLEAR_ROM_PGE_8822B (x) ((x) & (~BITS_ROM_PGE_8822B)) +#define BIT_GET_ROM_PGE_8822B (x) \ + (((x) >> BIT_SHIFT_ROM_PGE_8822B) & BIT_MASK_ROM_PGE_8822B) +#define BIT_SET_ROM_PGE_8822B (x, v) \ + (BIT_CLEAR_ROM_PGE_8822B(x) | BIT_ROM_PGE_8822B(v)) + +#define BIT_FW_INIT_RDY_8822B BIT(15) +#define BIT_FW_DW_RDY_8822B BIT(14) + +#define BIT_SHIFT_CPU_CLK_SEL_8822B 12 +#define BIT_MASK_CPU_CLK_SEL_8822B 0x3 +#define BIT_CPU_CLK_SEL_8822B (x) \ + (((x) & BIT_MASK_CPU_CLK_SEL_8822B) << BIT_SHIFT_CPU_CLK_SEL_8822B) +#define BITS_CPU_CLK_SEL_8822B \ + (BIT_MASK_CPU_CLK_SEL_8822B << BIT_SHIFT_CPU_CLK_SEL_8822B) +#define BIT_CLEAR_CPU_CLK_SEL_8822B (x) ((x) & (~BITS_CPU_CLK_SEL_8822B)) +#define BIT_GET_CPU_CLK_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_CPU_CLK_SEL_8822B) & BIT_MASK_CPU_CLK_SEL_8822B) +#define BIT_SET_CPU_CLK_SEL_8822B (x, v) \ + (BIT_CLEAR_CPU_CLK_SEL_8822B(x) | BIT_CPU_CLK_SEL_8822B(v)) + +#define BIT_CCLK_CHG_MASK_8822B BIT(11) +#define BIT_EMEM__TXBUF_CHKSUM_OK_8822B BIT(10) +#define BIT_EMEM_TXBUF_DW_RDY_8822B BIT(9) +#define BIT_EMEM_CHKSUM_OK_8822B BIT(8) +#define BIT_EMEM_DW_OK_8822B BIT(7) +#define BIT_DMEM_CHKSUM_OK_8822B BIT(6) +#define BIT_DMEM_DW_OK_8822B BIT(5) +#define BIT_IMEM_CHKSUM_OK_8822B BIT(4) +#define BIT_IMEM_DW_OK_8822B BIT(3) +#define BIT_IMEM_BOOT_LOAD_CHKSUM_OK_8822B BIT(2) +#define BIT_IMEM_BOOT_LOAD_DW_OK_8822B BIT(1) +#define BIT_MCUFWDL_EN_8822B BIT(0) + +/* 2 REG_MCU_TST_CFG_8822B */ + +#define BIT_SHIFT_C2H_MSG_8822B 0 +#define BIT_MASK_C2H_MSG_8822B 0xffff +#define BIT_C2H_MSG_8822B (x) \ + (((x) & BIT_MASK_C2H_MSG_8822B) << BIT_SHIFT_C2H_MSG_8822B) +#define BITS_C2H_MSG_8822B (BIT_MASK_C2H_MSG_8822B << BIT_SHIFT_C2H_MSG_8822B) +#define BIT_CLEAR_C2H_MSG_8822B (x) ((x) & (~BITS_C2H_MSG_8822B)) +#define BIT_GET_C2H_MSG_8822B (x) \ + (((x) >> BIT_SHIFT_C2H_MSG_8822B) & BIT_MASK_C2H_MSG_8822B) +#define BIT_SET_C2H_MSG_8822B (x, v) \ + (BIT_CLEAR_C2H_MSG_8822B(x) | BIT_C2H_MSG_8822B(v)) + +/* 2 REG_HMEBOX_E0_E1_8822B */ + +#define BIT_SHIFT_HOST_MSG_E1_8822B 16 +#define BIT_MASK_HOST_MSG_E1_8822B 0xffff +#define BIT_HOST_MSG_E1_8822B (x) \ + (((x) & BIT_MASK_HOST_MSG_E1_8822B) << BIT_SHIFT_HOST_MSG_E1_8822B) +#define BITS_HOST_MSG_E1_8822B \ + (BIT_MASK_HOST_MSG_E1_8822B << BIT_SHIFT_HOST_MSG_E1_8822B) +#define BIT_CLEAR_HOST_MSG_E1_8822B (x) ((x) & (~BITS_HOST_MSG_E1_8822B)) +#define BIT_GET_HOST_MSG_E1_8822B (x) \ + (((x) >> BIT_SHIFT_HOST_MSG_E1_8822B) & BIT_MASK_HOST_MSG_E1_8822B) +#define BIT_SET_HOST_MSG_E1_8822B (x, v) \ + (BIT_CLEAR_HOST_MSG_E1_8822B(x) | BIT_HOST_MSG_E1_8822B(v)) + +#define BIT_SHIFT_HOST_MSG_E0_8822B 0 +#define BIT_MASK_HOST_MSG_E0_8822B 0xffff +#define BIT_HOST_MSG_E0_8822B (x) \ + (((x) & BIT_MASK_HOST_MSG_E0_8822B) << BIT_SHIFT_HOST_MSG_E0_8822B) +#define BITS_HOST_MSG_E0_8822B \ + (BIT_MASK_HOST_MSG_E0_8822B << BIT_SHIFT_HOST_MSG_E0_8822B) +#define BIT_CLEAR_HOST_MSG_E0_8822B (x) ((x) & (~BITS_HOST_MSG_E0_8822B)) +#define BIT_GET_HOST_MSG_E0_8822B (x) \ + (((x) >> BIT_SHIFT_HOST_MSG_E0_8822B) & BIT_MASK_HOST_MSG_E0_8822B) +#define BIT_SET_HOST_MSG_E0_8822B (x, v) \ + (BIT_CLEAR_HOST_MSG_E0_8822B(x) | BIT_HOST_MSG_E0_8822B(v)) + +/* 2 REG_HMEBOX_E2_E3_8822B */ + +#define BIT_SHIFT_HOST_MSG_E3_8822B 16 +#define BIT_MASK_HOST_MSG_E3_8822B 0xffff +#define BIT_HOST_MSG_E3_8822B (x) \ + (((x) & BIT_MASK_HOST_MSG_E3_8822B) << BIT_SHIFT_HOST_MSG_E3_8822B) +#define BITS_HOST_MSG_E3_8822B \ + (BIT_MASK_HOST_MSG_E3_8822B << BIT_SHIFT_HOST_MSG_E3_8822B) +#define BIT_CLEAR_HOST_MSG_E3_8822B (x) ((x) & (~BITS_HOST_MSG_E3_8822B)) +#define BIT_GET_HOST_MSG_E3_8822B (x) \ + (((x) >> BIT_SHIFT_HOST_MSG_E3_8822B) & BIT_MASK_HOST_MSG_E3_8822B) +#define BIT_SET_HOST_MSG_E3_8822B (x, v) \ + (BIT_CLEAR_HOST_MSG_E3_8822B(x) | BIT_HOST_MSG_E3_8822B(v)) + +#define BIT_SHIFT_HOST_MSG_E2_8822B 0 +#define BIT_MASK_HOST_MSG_E2_8822B 0xffff +#define BIT_HOST_MSG_E2_8822B (x) \ + (((x) & BIT_MASK_HOST_MSG_E2_8822B) << BIT_SHIFT_HOST_MSG_E2_8822B) +#define BITS_HOST_MSG_E2_8822B \ + (BIT_MASK_HOST_MSG_E2_8822B << BIT_SHIFT_HOST_MSG_E2_8822B) +#define BIT_CLEAR_HOST_MSG_E2_8822B (x) ((x) & (~BITS_HOST_MSG_E2_8822B)) +#define BIT_GET_HOST_MSG_E2_8822B (x) \ + (((x) >> BIT_SHIFT_HOST_MSG_E2_8822B) & BIT_MASK_HOST_MSG_E2_8822B) +#define BIT_SET_HOST_MSG_E2_8822B (x, v) \ + (BIT_CLEAR_HOST_MSG_E2_8822B(x) | BIT_HOST_MSG_E2_8822B(v)) + +/* 2 REG_WLLPS_CTRL_8822B */ +#define BIT_WLLPSOP_EABM_8822B BIT(31) +#define BIT_WLLPSOP_ACKF_8822B BIT(30) +#define BIT_WLLPSOP_DLDM_8822B BIT(29) +#define BIT_WLLPSOP_ESWR_8822B BIT(28) +#define BIT_WLLPSOP_PWMM_8822B BIT(27) +#define BIT_WLLPSOP_EECK_8822B BIT(26) +#define BIT_WLLPSOP_WLMACOFF_8822B BIT(25) +#define BIT_WLLPSOP_EXTAL_8822B BIT(24) +#define BIT_WL_SYNPON_VOLTSPDN_8822B BIT(23) +#define BIT_WLLPSOP_WLBBOFF_8822B BIT(22) +#define BIT_WLLPSOP_WLMEM_DS_8822B BIT(21) + +#define BIT_SHIFT_LPLDH12_VADJ_STEP_DN_8822B 12 +#define BIT_MASK_LPLDH12_VADJ_STEP_DN_8822B 0xf +#define BIT_LPLDH12_VADJ_STEP_DN_8822B (x) \ + (((x) & BIT_MASK_LPLDH12_VADJ_STEP_DN_8822B) \ + << BIT_SHIFT_LPLDH12_VADJ_STEP_DN_8822B) +#define BITS_LPLDH12_VADJ_STEP_DN_8822B \ + (BIT_MASK_LPLDH12_VADJ_STEP_DN_8822B \ + << BIT_SHIFT_LPLDH12_VADJ_STEP_DN_8822B) +#define BIT_CLEAR_LPLDH12_VADJ_STEP_DN_8822B (x) \ + ((x) & (~BITS_LPLDH12_VADJ_STEP_DN_8822B)) +#define BIT_GET_LPLDH12_VADJ_STEP_DN_8822B (x) \ + (((x) >> BIT_SHIFT_LPLDH12_VADJ_STEP_DN_8822B) & \ + BIT_MASK_LPLDH12_VADJ_STEP_DN_8822B) +#define BIT_SET_LPLDH12_VADJ_STEP_DN_8822B (x, v) \ + (BIT_CLEAR_LPLDH12_VADJ_STEP_DN_8822B(x) | \ + BIT_LPLDH12_VADJ_STEP_DN_8822B(v)) + +#define BIT_SHIFT_V15ADJ_L1_STEP_DN_8822B 8 +#define BIT_MASK_V15ADJ_L1_STEP_DN_8822B 0x7 +#define BIT_V15ADJ_L1_STEP_DN_8822B (x) \ + (((x) & BIT_MASK_V15ADJ_L1_STEP_DN_8822B) \ + << BIT_SHIFT_V15ADJ_L1_STEP_DN_8822B) +#define BITS_V15ADJ_L1_STEP_DN_8822B \ + (BIT_MASK_V15ADJ_L1_STEP_DN_8822B << BIT_SHIFT_V15ADJ_L1_STEP_DN_8822B) +#define BIT_CLEAR_V15ADJ_L1_STEP_DN_8822B (x) \ + ((x) & (~BITS_V15ADJ_L1_STEP_DN_8822B)) +#define BIT_GET_V15ADJ_L1_STEP_DN_8822B (x) \ + (((x) >> BIT_SHIFT_V15ADJ_L1_STEP_DN_8822B) & \ + BIT_MASK_V15ADJ_L1_STEP_DN_8822B) +#define BIT_SET_V15ADJ_L1_STEP_DN_8822B (x, v) \ + (BIT_CLEAR_V15ADJ_L1_STEP_DN_8822B(x) | BIT_V15ADJ_L1_STEP_DN_8822B(v)) + +#define BIT_REGU_32K_CLK_EN_8822B BIT(1) +#define BIT_WL_LPS_EN_8822B BIT(0) + +/* 2 REG_AFE_CTRL5_8822B */ +#define BIT_BB_DBG_SEL_AFE_SDM_BIT0_8822B BIT(31) +#define BIT_ORDER_SDM_8822B BIT(30) +#define BIT_RFE_SEL_SDM_8822B BIT(29) + +#define BIT_SHIFT_REF_SEL_8822B 25 +#define BIT_MASK_REF_SEL_8822B 0xf +#define BIT_REF_SEL_8822B (x) \ + (((x) & BIT_MASK_REF_SEL_8822B) << BIT_SHIFT_REF_SEL_8822B) +#define BITS_REF_SEL_8822B (BIT_MASK_REF_SEL_8822B << BIT_SHIFT_REF_SEL_8822B) +#define BIT_CLEAR_REF_SEL_8822B (x) ((x) & (~BITS_REF_SEL_8822B)) +#define BIT_GET_REF_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_REF_SEL_8822B) & BIT_MASK_REF_SEL_8822B) +#define BIT_SET_REF_SEL_8822B (x, v) \ + (BIT_CLEAR_REF_SEL_8822B(x) | BIT_REF_SEL_8822B(v)) + +#define BIT_SHIFT_F0F_SDM_8822B 12 +#define BIT_MASK_F0F_SDM_8822B 0x1fff +#define BIT_F0F_SDM_8822B (x) \ + (((x) & BIT_MASK_F0F_SDM_8822B) << BIT_SHIFT_F0F_SDM_8822B) +#define BITS_F0F_SDM_8822B (BIT_MASK_F0F_SDM_8822B << BIT_SHIFT_F0F_SDM_8822B) +#define BIT_CLEAR_F0F_SDM_8822B (x) ((x) & (~BITS_F0F_SDM_8822B)) +#define BIT_GET_F0F_SDM_8822B (x) \ + (((x) >> BIT_SHIFT_F0F_SDM_8822B) & BIT_MASK_F0F_SDM_8822B) +#define BIT_SET_F0F_SDM_8822B (x, v) \ + (BIT_CLEAR_F0F_SDM_8822B(x) | BIT_F0F_SDM_8822B(v)) + +#define BIT_SHIFT_F0N_SDM_8822B 9 +#define BIT_MASK_F0N_SDM_8822B 0x7 +#define BIT_F0N_SDM_8822B (x) \ + (((x) & BIT_MASK_F0N_SDM_8822B) << BIT_SHIFT_F0N_SDM_8822B) +#define BITS_F0N_SDM_8822B (BIT_MASK_F0N_SDM_8822B << BIT_SHIFT_F0N_SDM_8822B) +#define BIT_CLEAR_F0N_SDM_8822B (x) ((x) & (~BITS_F0N_SDM_8822B)) +#define BIT_GET_F0N_SDM_8822B (x) \ + (((x) >> BIT_SHIFT_F0N_SDM_8822B) & BIT_MASK_F0N_SDM_8822B) +#define BIT_SET_F0N_SDM_8822B (x, v) \ + (BIT_CLEAR_F0N_SDM_8822B(x) | BIT_F0N_SDM_8822B(v)) + +#define BIT_SHIFT_DIVN_SDM_8822B 3 +#define BIT_MASK_DIVN_SDM_8822B 0x3f +#define BIT_DIVN_SDM_8822B (x) \ + (((x) & BIT_MASK_DIVN_SDM_8822B) << BIT_SHIFT_DIVN_SDM_8822B) +#define BITS_DIVN_SDM_8822B \ + (BIT_MASK_DIVN_SDM_8822B << BIT_SHIFT_DIVN_SDM_8822B) +#define BIT_CLEAR_DIVN_SDM_8822B (x) ((x) & (~BITS_DIVN_SDM_8822B)) +#define BIT_GET_DIVN_SDM_8822B (x) \ + (((x) >> BIT_SHIFT_DIVN_SDM_8822B) & BIT_MASK_DIVN_SDM_8822B) +#define BIT_SET_DIVN_SDM_8822B (x, v) \ + (BIT_CLEAR_DIVN_SDM_8822B(x) | BIT_DIVN_SDM_8822B(v)) + +/* 2 REG_GPIO_DEBOUNCE_CTRL_8822B */ +#define BIT_WLGP_DBC1EN_8822B BIT(15) + +#define BIT_SHIFT_WLGP_DBC1_8822B 8 +#define BIT_MASK_WLGP_DBC1_8822B 0xf +#define BIT_WLGP_DBC1_8822B (x) \ + (((x) & BIT_MASK_WLGP_DBC1_8822B) << BIT_SHIFT_WLGP_DBC1_8822B) +#define BITS_WLGP_DBC1_8822B \ + (BIT_MASK_WLGP_DBC1_8822B << BIT_SHIFT_WLGP_DBC1_8822B) +#define BIT_CLEAR_WLGP_DBC1_8822B (x) ((x) & (~BITS_WLGP_DBC1_8822B)) +#define BIT_GET_WLGP_DBC1_8822B (x) \ + (((x) >> BIT_SHIFT_WLGP_DBC1_8822B) & BIT_MASK_WLGP_DBC1_8822B) +#define BIT_SET_WLGP_DBC1_8822B (x, v) \ + (BIT_CLEAR_WLGP_DBC1_8822B(x) | BIT_WLGP_DBC1_8822B(v)) + +#define BIT_WLGP_DBC0EN_8822B BIT(7) + +#define BIT_SHIFT_WLGP_DBC0_8822B 0 +#define BIT_MASK_WLGP_DBC0_8822B 0xf +#define BIT_WLGP_DBC0_8822B (x) \ + (((x) & BIT_MASK_WLGP_DBC0_8822B) << BIT_SHIFT_WLGP_DBC0_8822B) +#define BITS_WLGP_DBC0_8822B \ + (BIT_MASK_WLGP_DBC0_8822B << BIT_SHIFT_WLGP_DBC0_8822B) +#define BIT_CLEAR_WLGP_DBC0_8822B (x) ((x) & (~BITS_WLGP_DBC0_8822B)) +#define BIT_GET_WLGP_DBC0_8822B (x) \ + (((x) >> BIT_SHIFT_WLGP_DBC0_8822B) & BIT_MASK_WLGP_DBC0_8822B) +#define BIT_SET_WLGP_DBC0_8822B (x, v) \ + (BIT_CLEAR_WLGP_DBC0_8822B(x) | BIT_WLGP_DBC0_8822B(v)) + +/* 2 REG_RPWM2_8822B */ + +#define BIT_SHIFT_RPWM2_8822B 16 +#define BIT_MASK_RPWM2_8822B 0xffff +#define BIT_RPWM2_8822B (x) \ + (((x) & BIT_MASK_RPWM2_8822B) << BIT_SHIFT_RPWM2_8822B) +#define BITS_RPWM2_8822B (BIT_MASK_RPWM2_8822B << BIT_SHIFT_RPWM2_8822B) +#define BIT_CLEAR_RPWM2_8822B (x) ((x) & (~BITS_RPWM2_8822B)) +#define BIT_GET_RPWM2_8822B (x) \ + (((x) >> BIT_SHIFT_RPWM2_8822B) & BIT_MASK_RPWM2_8822B) +#define BIT_SET_RPWM2_8822B (x, v) \ + (BIT_CLEAR_RPWM2_8822B(x) | BIT_RPWM2_8822B(v)) + +/* 2 REG_SYSON_FSM_MON_8822B */ + +#define BIT_SHIFT_FSM_MON_SEL_8822B 24 +#define BIT_MASK_FSM_MON_SEL_8822B 0x7 +#define BIT_FSM_MON_SEL_8822B (x) \ + (((x) & BIT_MASK_FSM_MON_SEL_8822B) << BIT_SHIFT_FSM_MON_SEL_8822B) +#define BITS_FSM_MON_SEL_8822B \ + (BIT_MASK_FSM_MON_SEL_8822B << BIT_SHIFT_FSM_MON_SEL_8822B) +#define BIT_CLEAR_FSM_MON_SEL_8822B (x) ((x) & (~BITS_FSM_MON_SEL_8822B)) +#define BIT_GET_FSM_MON_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_FSM_MON_SEL_8822B) & BIT_MASK_FSM_MON_SEL_8822B) +#define BIT_SET_FSM_MON_SEL_8822B (x, v) \ + (BIT_CLEAR_FSM_MON_SEL_8822B(x) | BIT_FSM_MON_SEL_8822B(v)) + +#define BIT_DOP_ELDO_8822B BIT(23) +#define BIT_FSM_MON_UPD_8822B BIT(15) + +#define BIT_SHIFT_FSM_PAR_8822B 0 +#define BIT_MASK_FSM_PAR_8822B 0x7fff +#define BIT_FSM_PAR_8822B (x) \ + (((x) & BIT_MASK_FSM_PAR_8822B) << BIT_SHIFT_FSM_PAR_8822B) +#define BITS_FSM_PAR_8822B (BIT_MASK_FSM_PAR_8822B << BIT_SHIFT_FSM_PAR_8822B) +#define BIT_CLEAR_FSM_PAR_8822B (x) ((x) & (~BITS_FSM_PAR_8822B)) +#define BIT_GET_FSM_PAR_8822B (x) \ + (((x) >> BIT_SHIFT_FSM_PAR_8822B) & BIT_MASK_FSM_PAR_8822B) +#define BIT_SET_FSM_PAR_8822B (x, v) \ + (BIT_CLEAR_FSM_PAR_8822B(x) | BIT_FSM_PAR_8822B(v)) + +/* 2 REG_AFE_CTRL6_8822B */ + +#define BIT_SHIFT_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B 0 +#define BIT_MASK_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B 0x7 +#define BIT_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B (x) \ + (((x) & BIT_MASK_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B) \ + << BIT_SHIFT_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B) +#define BITS_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B \ + (BIT_MASK_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B \ + << BIT_SHIFT_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B) +#define BIT_CLEAR_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B (x) \ + ((x) & (~BITS_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B)) +#define BIT_GET_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B (x) \ + (((x) >> BIT_SHIFT_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B) & \ + BIT_MASK_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B) +#define BIT_SET_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B (x, v) \ + (BIT_CLEAR_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B(x) | \ + BIT_BB_DBG_SEL_AFE_SDM_BIT3_1_8822B(v)) + +/* 2 REG_PMC_DBG_CTRL1_8822B */ +#define BIT_BT_INT_EN_8822B BIT(31) + +#define BIT_SHIFT_RD_WR_WIFI_BT_INFO_8822B 16 +#define BIT_MASK_RD_WR_WIFI_BT_INFO_8822B 0x7fff +#define BIT_RD_WR_WIFI_BT_INFO_8822B (x) \ + (((x) & BIT_MASK_RD_WR_WIFI_BT_INFO_8822B) \ + << BIT_SHIFT_RD_WR_WIFI_BT_INFO_8822B) +#define BITS_RD_WR_WIFI_BT_INFO_8822B \ + (BIT_MASK_RD_WR_WIFI_BT_INFO_8822B \ + << BIT_SHIFT_RD_WR_WIFI_BT_INFO_8822B) +#define BIT_CLEAR_RD_WR_WIFI_BT_INFO_8822B (x) \ + ((x) & (~BITS_RD_WR_WIFI_BT_INFO_8822B)) +#define BIT_GET_RD_WR_WIFI_BT_INFO_8822B (x) \ + (((x) >> BIT_SHIFT_RD_WR_WIFI_BT_INFO_8822B) & \ + BIT_MASK_RD_WR_WIFI_BT_INFO_8822B) +#define BIT_SET_RD_WR_WIFI_BT_INFO_8822B (x, v) \ + (BIT_CLEAR_RD_WR_WIFI_BT_INFO_8822B(x) | \ + BIT_RD_WR_WIFI_BT_INFO_8822B(v)) + +#define BIT_PMC_WR_OVF_8822B BIT(8) + +#define BIT_SHIFT_WLPMC_ERRINT_8822B 0 +#define BIT_MASK_WLPMC_ERRINT_8822B 0xff +#define BIT_WLPMC_ERRINT_8822B (x) \ + (((x) & BIT_MASK_WLPMC_ERRINT_8822B) << BIT_SHIFT_WLPMC_ERRINT_8822B) +#define BITS_WLPMC_ERRINT_8822B \ + (BIT_MASK_WLPMC_ERRINT_8822B << BIT_SHIFT_WLPMC_ERRINT_8822B) +#define BIT_CLEAR_WLPMC_ERRINT_8822B (x) ((x) & (~BITS_WLPMC_ERRINT_8822B)) +#define BIT_GET_WLPMC_ERRINT_8822B (x) \ + (((x) >> BIT_SHIFT_WLPMC_ERRINT_8822B) & BIT_MASK_WLPMC_ERRINT_8822B) +#define BIT_SET_WLPMC_ERRINT_8822B (x, v) \ + (BIT_CLEAR_WLPMC_ERRINT_8822B(x) | BIT_WLPMC_ERRINT_8822B(v)) + +/* 2 REG_AFE_CTRL7_8822B */ + +#define BIT_SHIFT_SEL_V_8822B 30 +#define BIT_MASK_SEL_V_8822B 0x3 +#define BIT_SEL_V_8822B (x) \ + (((x) & BIT_MASK_SEL_V_8822B) << BIT_SHIFT_SEL_V_8822B) +#define BITS_SEL_V_8822B (BIT_MASK_SEL_V_8822B << BIT_SHIFT_SEL_V_8822B) +#define BIT_CLEAR_SEL_V_8822B (x) ((x) & (~BITS_SEL_V_8822B)) +#define BIT_GET_SEL_V_8822B (x) \ + (((x) >> BIT_SHIFT_SEL_V_8822B) & BIT_MASK_SEL_V_8822B) +#define BIT_SET_SEL_V_8822B (x, v) \ + (BIT_CLEAR_SEL_V_8822B(x) | BIT_SEL_V_8822B(v)) + +#define BIT_SEL_LDO_PC_8822B BIT(29) + +#define BIT_SHIFT_CK_MON_SEL_8822B 26 +#define BIT_MASK_CK_MON_SEL_8822B 0x7 +#define BIT_CK_MON_SEL_8822B (x) \ + (((x) & BIT_MASK_CK_MON_SEL_8822B) << BIT_SHIFT_CK_MON_SEL_8822B) +#define BITS_CK_MON_SEL_8822B \ + (BIT_MASK_CK_MON_SEL_8822B << BIT_SHIFT_CK_MON_SEL_8822B) +#define BIT_CLEAR_CK_MON_SEL_8822B (x) ((x) & (~BITS_CK_MON_SEL_8822B)) +#define BIT_GET_CK_MON_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_CK_MON_SEL_8822B) & BIT_MASK_CK_MON_SEL_8822B) +#define BIT_SET_CK_MON_SEL_8822B (x, v) \ + (BIT_CLEAR_CK_MON_SEL_8822B(x) | BIT_CK_MON_SEL_8822B(v)) + +#define BIT_CK_MON_EN_8822B BIT(25) +#define BIT_FREF_EDGE_8822B BIT(24) +#define BIT_CK320M_EN_8822B BIT(23) +#define BIT_CK_5M_EN_8822B BIT(22) +#define BIT_TESTEN_8822B BIT(21) + +/* 2 REG_HIMR0_8822B */ +#define BIT_TIMEOUT_INTERRUPT2_MASK_8822B BIT(31) +#define BIT_TIMEOUT_INTERRUTP1_MASK_8822B BIT(30) +#define BIT_PSTIMEOUT_MSK_8822B BIT(29) +#define BIT_GTINT4_MSK_8822B BIT(28) +#define BIT_GTINT3_MSK_8822B BIT(27) +#define BIT_TXBCN0ERR_MSK_8822B BIT(26) +#define BIT_TXBCN0OK_MSK_8822B BIT(25) +#define BIT_TSF_BIT32_TOGGLE_MSK_8822B BIT(24) +#define BIT_BCNDMAINT0_MSK_8822B BIT(20) +#define BIT_BCNDERR0_MSK_8822B BIT(16) +#define BIT_HSISR_IND_ON_INT_MSK_8822B BIT(15) +#define BIT_HISR3_IND_INT_MSK_8822B BIT(14) +#define BIT_HISR2_IND_INT_MSK_8822B BIT(13) +#define BIT_HISR1_IND_MSK_8822B BIT(11) +#define BIT_C2HCMD_MSK_8822B BIT(10) +#define BIT_CPWM2_MSK_8822B BIT(9) +#define BIT_CPWM_MSK_8822B BIT(8) +#define BIT_HIGHDOK_MSK_8822B BIT(7) +#define BIT_MGTDOK_MSK_8822B BIT(6) +#define BIT_BKDOK_MSK_8822B BIT(5) +#define BIT_BEDOK_MSK_8822B BIT(4) +#define BIT_VIDOK_MSK_8822B BIT(3) +#define BIT_VODOK_MSK_8822B BIT(2) +#define BIT_RDU_MSK_8822B BIT(1) +#define BIT_RXOK_MSK_8822B BIT(0) + +/* 2 REG_HISR0_8822B */ +#define BIT_PSTIMEOUT2_8822B BIT(31) +#define BIT_PSTIMEOUT1_8822B BIT(30) +#define BIT_PSTIMEOUT_8822B BIT(29) +#define BIT_GTINT4_8822B BIT(28) +#define BIT_GTINT3_8822B BIT(27) +#define BIT_TXBCN0ERR_8822B BIT(26) +#define BIT_TXBCN0OK_8822B BIT(25) +#define BIT_TSF_BIT32_TOGGLE_8822B BIT(24) +#define BIT_BCNDMAINT0_8822B BIT(20) +#define BIT_BCNDERR0_8822B BIT(16) +#define BIT_HSISR_IND_ON_INT_8822B BIT(15) +#define BIT_HISR3_IND_INT_8822B BIT(14) +#define BIT_HISR2_IND_INT_8822B BIT(13) +#define BIT_HISR1_IND_INT_8822B BIT(11) +#define BIT_C2HCMD_8822B BIT(10) +#define BIT_CPWM2_8822B BIT(9) +#define BIT_CPWM_8822B BIT(8) +#define BIT_HIGHDOK_8822B BIT(7) +#define BIT_MGTDOK_8822B BIT(6) +#define BIT_BKDOK_8822B BIT(5) +#define BIT_BEDOK_8822B BIT(4) +#define BIT_VIDOK_8822B BIT(3) +#define BIT_VODOK_8822B BIT(2) +#define BIT_RDU_8822B BIT(1) +#define BIT_RXOK_8822B BIT(0) + +/* 2 REG_HIMR1_8822B */ +#define BIT_TXFIFO_TH_INT_8822B BIT(30) +#define BIT_BTON_STS_UPDATE_MASK_8822B BIT(29) +#define BIT_BCNDMAINT7__MSK_8822B BIT(27) +#define BIT_BCNDMAINT6__MSK_8822B BIT(26) +#define BIT_BCNDMAINT5__MSK_8822B BIT(25) +#define BIT_BCNDMAINT4__MSK_8822B BIT(24) +#define BIT_BCNDMAINT3_MSK_8822B BIT(23) +#define BIT_BCNDMAINT2_MSK_8822B BIT(22) +#define BIT_BCNDMAINT1_MSK_8822B BIT(21) +#define BIT_BCNDERR7_MSK_8822B BIT(20) +#define BIT_BCNDERR6_MSK_8822B BIT(19) +#define BIT_BCNDERR5_MSK_8822B BIT(18) +#define BIT_BCNDERR4_MSK_8822B BIT(17) +#define BIT_BCNDERR3_MSK_8822B BIT(16) +#define BIT_BCNDERR2_MSK_8822B BIT(15) +#define BIT_BCNDERR1_MSK_8822B BIT(14) +#define BIT_ATIMEND_E_V1_MSK_8822B BIT(12) +#define BIT_TXERR_MSK_8822B BIT(11) +#define BIT_RXERR_MSK_8822B BIT(10) +#define BIT_TXFOVW_MSK_8822B BIT(9) +#define BIT_FOVW_MSK_8822B BIT(8) +#define BIT_CPU_MGQ_TXDONE_MSK_8822B BIT(5) +#define BIT_PS_TIMER_C_MSK_8822B BIT(4) +#define BIT_PS_TIMER_B_MSK_8822B BIT(3) +#define BIT_PS_TIMER_A_MSK_8822B BIT(2) +#define BIT_CPUMGQ_TX_TIMER_MSK_8822B BIT(1) + +/* 2 REG_HISR1_8822B */ +#define BIT_TXFIFO_TH_INT_8822B BIT(30) +#define BIT_BTON_STS_UPDATE_INT_8822B BIT(29) +#define BIT_BCNDMAINT7_8822B BIT(27) +#define BIT_BCNDMAINT6_8822B BIT(26) +#define BIT_BCNDMAINT5_8822B BIT(25) +#define BIT_BCNDMAINT4_8822B BIT(24) +#define BIT_BCNDMAINT3_8822B BIT(23) +#define BIT_BCNDMAINT2_8822B BIT(22) +#define BIT_BCNDMAINT1_8822B BIT(21) +#define BIT_BCNDERR7_8822B BIT(20) +#define BIT_BCNDERR6_8822B BIT(19) +#define BIT_BCNDERR5_8822B BIT(18) +#define BIT_BCNDERR4_8822B BIT(17) +#define BIT_BCNDERR3_8822B BIT(16) +#define BIT_BCNDERR2_8822B BIT(15) +#define BIT_BCNDERR1_8822B BIT(14) +#define BIT_ATIMEND_E_V1_INT_8822B BIT(12) +#define BIT_TXERR_INT_8822B BIT(11) +#define BIT_RXERR_INT_8822B BIT(10) +#define BIT_TXFOVW_8822B BIT(9) +#define BIT_FOVW_8822B BIT(8) +#define BIT_CPU_MGQ_TXDONE_8822B BIT(5) +#define BIT_PS_TIMER_C_8822B BIT(4) +#define BIT_PS_TIMER_B_8822B BIT(3) +#define BIT_PS_TIMER_A_8822B BIT(2) +#define BIT_CPUMGQ_TX_TIMER_8822B BIT(1) + +/* 2 REG_DBG_PORT_SEL_8822B */ + +#define BIT_SHIFT_DEBUG_ST_8822B 0 +#define BIT_MASK_DEBUG_ST_8822B 0xffffffffL +#define BIT_DEBUG_ST_8822B (x) \ + (((x) & BIT_MASK_DEBUG_ST_8822B) << BIT_SHIFT_DEBUG_ST_8822B) +#define BITS_DEBUG_ST_8822B \ + (BIT_MASK_DEBUG_ST_8822B << BIT_SHIFT_DEBUG_ST_8822B) +#define BIT_CLEAR_DEBUG_ST_8822B (x) ((x) & (~BITS_DEBUG_ST_8822B)) +#define BIT_GET_DEBUG_ST_8822B (x) \ + (((x) >> BIT_SHIFT_DEBUG_ST_8822B) & BIT_MASK_DEBUG_ST_8822B) +#define BIT_SET_DEBUG_ST_8822B (x, v) \ + (BIT_CLEAR_DEBUG_ST_8822B(x) | BIT_DEBUG_ST_8822B(v)) + +/* 2 REG_PAD_CTRL2_8822B */ +#define BIT_USB3_USB2_TRANSITION_8822B BIT(20) + +#define BIT_SHIFT_USB23_SW_MODE_V1_8822B 18 +#define BIT_MASK_USB23_SW_MODE_V1_8822B 0x3 +#define BIT_USB23_SW_MODE_V1_8822B (x) \ + (((x) & BIT_MASK_USB23_SW_MODE_V1_8822B) \ + << BIT_SHIFT_USB23_SW_MODE_V1_8822B) +#define BITS_USB23_SW_MODE_V1_8822B \ + (BIT_MASK_USB23_SW_MODE_V1_8822B << BIT_SHIFT_USB23_SW_MODE_V1_8822B) +#define BIT_CLEAR_USB23_SW_MODE_V1_8822B (x) \ + ((x) & (~BITS_USB23_SW_MODE_V1_8822B)) +#define BIT_GET_USB23_SW_MODE_V1_8822B (x) \ + (((x) >> BIT_SHIFT_USB23_SW_MODE_V1_8822B) & \ + BIT_MASK_USB23_SW_MODE_V1_8822B) +#define BIT_SET_USB23_SW_MODE_V1_8822B (x, v) \ + (BIT_CLEAR_USB23_SW_MODE_V1_8822B(x) | BIT_USB23_SW_MODE_V1_8822B(v)) + +#define BIT_NO_PDN_CHIPOFF_V1_8822B BIT(17) +#define BIT_RSM_EN_V1_8822B BIT(16) + +#define BIT_SHIFT_MATCH_CNT_8822B 8 +#define BIT_MASK_MATCH_CNT_8822B 0xff +#define BIT_MATCH_CNT_8822B (x) \ + (((x) & BIT_MASK_MATCH_CNT_8822B) << BIT_SHIFT_MATCH_CNT_8822B) +#define BITS_MATCH_CNT_8822B \ + (BIT_MASK_MATCH_CNT_8822B << BIT_SHIFT_MATCH_CNT_8822B) +#define BIT_CLEAR_MATCH_CNT_8822B (x) ((x) & (~BITS_MATCH_CNT_8822B)) +#define BIT_GET_MATCH_CNT_8822B (x) \ + (((x) >> BIT_SHIFT_MATCH_CNT_8822B) & BIT_MASK_MATCH_CNT_8822B) +#define BIT_SET_MATCH_CNT_8822B (x, v) \ + (BIT_CLEAR_MATCH_CNT_8822B(x) | BIT_MATCH_CNT_8822B(v)) + +#define BIT_LD_B12V_EN_8822B BIT(7) +#define BIT_EECS_IOSEL_V1_8822B BIT(6) +#define BIT_EECS_DATA_O_V1_8822B BIT(5) +#define BIT_EECS_DATA_I_V1_8822B BIT(4) +#define BIT_EESK_IOSEL_V1_8822B BIT(2) +#define BIT_EESK_DATA_O_V1_8822B BIT(1) +#define BIT_EESK_DATA_I_V1_8822B BIT(0) + +/* 2 REG_NOT_VALID_8822B */ + +/* 2 REG_PMC_DBG_CTRL2_8822B */ + +#define BIT_SHIFT_EFUSE_BURN_GNT_8822B 24 +#define BIT_MASK_EFUSE_BURN_GNT_8822B 0xff +#define BIT_EFUSE_BURN_GNT_8822B (x) \ + (((x) & BIT_MASK_EFUSE_BURN_GNT_8822B) \ + << BIT_SHIFT_EFUSE_BURN_GNT_8822B) +#define BITS_EFUSE_BURN_GNT_8822B \ + (BIT_MASK_EFUSE_BURN_GNT_8822B << BIT_SHIFT_EFUSE_BURN_GNT_8822B) +#define BIT_CLEAR_EFUSE_BURN_GNT_8822B (x) ((x) & (~BITS_EFUSE_BURN_GNT_8822B)) +#define BIT_GET_EFUSE_BURN_GNT_8822B (x) \ + (((x) >> BIT_SHIFT_EFUSE_BURN_GNT_8822B) & \ + BIT_MASK_EFUSE_BURN_GNT_8822B) +#define BIT_SET_EFUSE_BURN_GNT_8822B (x, v) \ + (BIT_CLEAR_EFUSE_BURN_GNT_8822B(x) | BIT_EFUSE_BURN_GNT_8822B(v)) + +#define BIT_STOP_WL_PMC_8822B BIT(9) +#define BIT_STOP_SYM_PMC_8822B BIT(8) +#define BIT_REG_RST_WLPMC_8822B BIT(5) +#define BIT_REG_RST_PD12N_8822B BIT(4) +#define BIT_SYSON_DIS_WLREG_WRMSK_8822B BIT(3) +#define BIT_SYSON_DIS_PMCREG_WRMSK_8822B BIT(2) + +#define BIT_SHIFT_SYSON_REG_ARB_8822B 0 +#define BIT_MASK_SYSON_REG_ARB_8822B 0x3 +#define BIT_SYSON_REG_ARB_8822B (x) \ + (((x) & BIT_MASK_SYSON_REG_ARB_8822B) << BIT_SHIFT_SYSON_REG_ARB_8822B) +#define BITS_SYSON_REG_ARB_8822B \ + (BIT_MASK_SYSON_REG_ARB_8822B << BIT_SHIFT_SYSON_REG_ARB_8822B) +#define BIT_CLEAR_SYSON_REG_ARB_8822B (x) ((x) & (~BITS_SYSON_REG_ARB_8822B)) +#define BIT_GET_SYSON_REG_ARB_8822B (x) \ + (((x) >> BIT_SHIFT_SYSON_REG_ARB_8822B) & BIT_MASK_SYSON_REG_ARB_8822B) +#define BIT_SET_SYSON_REG_ARB_8822B (x, v) \ + (BIT_CLEAR_SYSON_REG_ARB_8822B(x) | BIT_SYSON_REG_ARB_8822B(v)) + +/* 2 REG_BIST_CTRL_8822B */ +#define BIT_BIST_USB_DIS_8822B BIT(27) +#define BIT_BIST_PCI_DIS_8822B BIT(26) +#define BIT_BIST_BT_DIS_8822B BIT(25) +#define BIT_BIST_WL_DIS_8822B BIT(24) + +#define BIT_SHIFT_BIST_RPT_SEL_8822B 16 +#define BIT_MASK_BIST_RPT_SEL_8822B 0xf +#define BIT_BIST_RPT_SEL_8822B (x) \ + (((x) & BIT_MASK_BIST_RPT_SEL_8822B) << BIT_SHIFT_BIST_RPT_SEL_8822B) +#define BITS_BIST_RPT_SEL_8822B \ + (BIT_MASK_BIST_RPT_SEL_8822B << BIT_SHIFT_BIST_RPT_SEL_8822B) +#define BIT_CLEAR_BIST_RPT_SEL_8822B (x) ((x) & (~BITS_BIST_RPT_SEL_8822B)) +#define BIT_GET_BIST_RPT_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_BIST_RPT_SEL_8822B) & BIT_MASK_BIST_RPT_SEL_8822B) +#define BIT_SET_BIST_RPT_SEL_8822B (x, v) \ + (BIT_CLEAR_BIST_RPT_SEL_8822B(x) | BIT_BIST_RPT_SEL_8822B(v)) + +#define BIT_BIST_RESUME_PS_8822B BIT(4) +#define BIT_BIST_RESUME_8822B BIT(3) +#define BIT_BIST_NORMAL_8822B BIT(2) +#define BIT_BIST_RSTN_8822B BIT(1) +#define BIT_BIST_CLK_EN_8822B BIT(0) + +/* 2 REG_BIST_RPT_8822B */ + +#define BIT_SHIFT_MBIST_REPORT_8822B 0 +#define BIT_MASK_MBIST_REPORT_8822B 0xffffffffL +#define BIT_MBIST_REPORT_8822B (x) \ + (((x) & BIT_MASK_MBIST_REPORT_8822B) << BIT_SHIFT_MBIST_REPORT_8822B) +#define BITS_MBIST_REPORT_8822B \ + (BIT_MASK_MBIST_REPORT_8822B << BIT_SHIFT_MBIST_REPORT_8822B) +#define BIT_CLEAR_MBIST_REPORT_8822B (x) ((x) & (~BITS_MBIST_REPORT_8822B)) +#define BIT_GET_MBIST_REPORT_8822B (x) \ + (((x) >> BIT_SHIFT_MBIST_REPORT_8822B) & BIT_MASK_MBIST_REPORT_8822B) +#define BIT_SET_MBIST_REPORT_8822B (x, v) \ + (BIT_CLEAR_MBIST_REPORT_8822B(x) | BIT_MBIST_REPORT_8822B(v)) + +/* 2 REG_MEM_CTRL_8822B */ +#define BIT_UMEM_RME_8822B BIT(31) + +#define BIT_SHIFT_BT_SPRAM_8822B 28 +#define BIT_MASK_BT_SPRAM_8822B 0x3 +#define BIT_BT_SPRAM_8822B (x) \ + (((x) & BIT_MASK_BT_SPRAM_8822B) << BIT_SHIFT_BT_SPRAM_8822B) +#define BITS_BT_SPRAM_8822B \ + (BIT_MASK_BT_SPRAM_8822B << BIT_SHIFT_BT_SPRAM_8822B) +#define BIT_CLEAR_BT_SPRAM_8822B (x) ((x) & (~BITS_BT_SPRAM_8822B)) +#define BIT_GET_BT_SPRAM_8822B (x) \ + (((x) >> BIT_SHIFT_BT_SPRAM_8822B) & BIT_MASK_BT_SPRAM_8822B) +#define BIT_SET_BT_SPRAM_8822B (x, v) \ + (BIT_CLEAR_BT_SPRAM_8822B(x) | BIT_BT_SPRAM_8822B(v)) + +#define BIT_SHIFT_BT_ROM_8822B 24 +#define BIT_MASK_BT_ROM_8822B 0xf +#define BIT_BT_ROM_8822B (x) \ + (((x) & BIT_MASK_BT_ROM_8822B) << BIT_SHIFT_BT_ROM_8822B) +#define BITS_BT_ROM_8822B (BIT_MASK_BT_ROM_8822B << BIT_SHIFT_BT_ROM_8822B) +#define BIT_CLEAR_BT_ROM_8822B (x) ((x) & (~BITS_BT_ROM_8822B)) +#define BIT_GET_BT_ROM_8822B (x) \ + (((x) >> BIT_SHIFT_BT_ROM_8822B) & BIT_MASK_BT_ROM_8822B) +#define BIT_SET_BT_ROM_8822B (x, v) \ + (BIT_CLEAR_BT_ROM_8822B(x) | BIT_BT_ROM_8822B(v)) + +#define BIT_SHIFT_PCI_DPRAM_8822B 10 +#define BIT_MASK_PCI_DPRAM_8822B 0x3 +#define BIT_PCI_DPRAM_8822B (x) \ + (((x) & BIT_MASK_PCI_DPRAM_8822B) << BIT_SHIFT_PCI_DPRAM_8822B) +#define BITS_PCI_DPRAM_8822B \ + (BIT_MASK_PCI_DPRAM_8822B << BIT_SHIFT_PCI_DPRAM_8822B) +#define BIT_CLEAR_PCI_DPRAM_8822B (x) ((x) & (~BITS_PCI_DPRAM_8822B)) +#define BIT_GET_PCI_DPRAM_8822B (x) \ + (((x) >> BIT_SHIFT_PCI_DPRAM_8822B) & BIT_MASK_PCI_DPRAM_8822B) +#define BIT_SET_PCI_DPRAM_8822B (x, v) \ + (BIT_CLEAR_PCI_DPRAM_8822B(x) | BIT_PCI_DPRAM_8822B(v)) + +#define BIT_SHIFT_PCI_SPRAM_8822B 8 +#define BIT_MASK_PCI_SPRAM_8822B 0x3 +#define BIT_PCI_SPRAM_8822B (x) \ + (((x) & BIT_MASK_PCI_SPRAM_8822B) << BIT_SHIFT_PCI_SPRAM_8822B) +#define BITS_PCI_SPRAM_8822B \ + (BIT_MASK_PCI_SPRAM_8822B << BIT_SHIFT_PCI_SPRAM_8822B) +#define BIT_CLEAR_PCI_SPRAM_8822B (x) ((x) & (~BITS_PCI_SPRAM_8822B)) +#define BIT_GET_PCI_SPRAM_8822B (x) \ + (((x) >> BIT_SHIFT_PCI_SPRAM_8822B) & BIT_MASK_PCI_SPRAM_8822B) +#define BIT_SET_PCI_SPRAM_8822B (x, v) \ + (BIT_CLEAR_PCI_SPRAM_8822B(x) | BIT_PCI_SPRAM_8822B(v)) + +#define BIT_SHIFT_USB_SPRAM_8822B 6 +#define BIT_MASK_USB_SPRAM_8822B 0x3 +#define BIT_USB_SPRAM_8822B (x) \ + (((x) & BIT_MASK_USB_SPRAM_8822B) << BIT_SHIFT_USB_SPRAM_8822B) +#define BITS_USB_SPRAM_8822B \ + (BIT_MASK_USB_SPRAM_8822B << BIT_SHIFT_USB_SPRAM_8822B) +#define BIT_CLEAR_USB_SPRAM_8822B (x) ((x) & (~BITS_USB_SPRAM_8822B)) +#define BIT_GET_USB_SPRAM_8822B (x) \ + (((x) >> BIT_SHIFT_USB_SPRAM_8822B) & BIT_MASK_USB_SPRAM_8822B) +#define BIT_SET_USB_SPRAM_8822B (x, v) \ + (BIT_CLEAR_USB_SPRAM_8822B(x) | BIT_USB_SPRAM_8822B(v)) + +#define BIT_SHIFT_USB_SPRF_8822B 4 +#define BIT_MASK_USB_SPRF_8822B 0x3 +#define BIT_USB_SPRF_8822B (x) \ + (((x) & BIT_MASK_USB_SPRF_8822B) << BIT_SHIFT_USB_SPRF_8822B) +#define BITS_USB_SPRF_8822B \ + (BIT_MASK_USB_SPRF_8822B << BIT_SHIFT_USB_SPRF_8822B) +#define BIT_CLEAR_USB_SPRF_8822B (x) ((x) & (~BITS_USB_SPRF_8822B)) +#define BIT_GET_USB_SPRF_8822B (x) \ + (((x) >> BIT_SHIFT_USB_SPRF_8822B) & BIT_MASK_USB_SPRF_8822B) +#define BIT_SET_USB_SPRF_8822B (x, v) \ + (BIT_CLEAR_USB_SPRF_8822B(x) | BIT_USB_SPRF_8822B(v)) + +#define BIT_SHIFT_MCU_ROM_8822B 0 +#define BIT_MASK_MCU_ROM_8822B 0xf +#define BIT_MCU_ROM_8822B (x) \ + (((x) & BIT_MASK_MCU_ROM_8822B) << BIT_SHIFT_MCU_ROM_8822B) +#define BITS_MCU_ROM_8822B (BIT_MASK_MCU_ROM_8822B << BIT_SHIFT_MCU_ROM_8822B) +#define BIT_CLEAR_MCU_ROM_8822B (x) ((x) & (~BITS_MCU_ROM_8822B)) +#define BIT_GET_MCU_ROM_8822B (x) \ + (((x) >> BIT_SHIFT_MCU_ROM_8822B) & BIT_MASK_MCU_ROM_8822B) +#define BIT_SET_MCU_ROM_8822B (x, v) \ + (BIT_CLEAR_MCU_ROM_8822B(x) | BIT_MCU_ROM_8822B(v)) + +/* 2 REG_AFE_CTRL8_8822B */ +#define BIT_SYN_AGPIO_8822B BIT(20) +#define BIT_XTAL_LP_8822B BIT(4) +#define BIT_XTAL_GM_SEP_8822B BIT(3) + +#define BIT_SHIFT_XTAL_SEL_TOK_8822B 0 +#define BIT_MASK_XTAL_SEL_TOK_8822B 0x7 +#define BIT_XTAL_SEL_TOK_8822B (x) \ + (((x) & BIT_MASK_XTAL_SEL_TOK_8822B) << BIT_SHIFT_XTAL_SEL_TOK_8822B) +#define BITS_XTAL_SEL_TOK_8822B \ + (BIT_MASK_XTAL_SEL_TOK_8822B << BIT_SHIFT_XTAL_SEL_TOK_8822B) +#define BIT_CLEAR_XTAL_SEL_TOK_8822B (x) ((x) & (~BITS_XTAL_SEL_TOK_8822B)) +#define BIT_GET_XTAL_SEL_TOK_8822B (x) \ + (((x) >> BIT_SHIFT_XTAL_SEL_TOK_8822B) & BIT_MASK_XTAL_SEL_TOK_8822B) +#define BIT_SET_XTAL_SEL_TOK_8822B (x, v) \ + (BIT_CLEAR_XTAL_SEL_TOK_8822B(x) | BIT_XTAL_SEL_TOK_8822B(v)) + +/* 2 REG_USB_SIE_INTF_8822B */ +#define BIT_RD_SEL_8822B BIT(31) +#define BIT_USB_SIE_INTF_WE_V1_8822B BIT(30) +#define BIT_USB_SIE_INTF_BYIOREG_V1_8822B BIT(29) +#define BIT_USB_SIE_SELECT_8822B BIT(28) + +#define BIT_SHIFT_USB_SIE_INTF_ADDR_V1_8822B 16 +#define BIT_MASK_USB_SIE_INTF_ADDR_V1_8822B 0x1ff +#define BIT_USB_SIE_INTF_ADDR_V1_8822B (x) \ + (((x) & BIT_MASK_USB_SIE_INTF_ADDR_V1_8822B) \ + << BIT_SHIFT_USB_SIE_INTF_ADDR_V1_8822B) +#define BITS_USB_SIE_INTF_ADDR_V1_8822B \ + (BIT_MASK_USB_SIE_INTF_ADDR_V1_8822B \ + << BIT_SHIFT_USB_SIE_INTF_ADDR_V1_8822B) +#define BIT_CLEAR_USB_SIE_INTF_ADDR_V1_8822B (x) \ + ((x) & (~BITS_USB_SIE_INTF_ADDR_V1_8822B)) +#define BIT_GET_USB_SIE_INTF_ADDR_V1_8822B (x) \ + (((x) >> BIT_SHIFT_USB_SIE_INTF_ADDR_V1_8822B) & \ + BIT_MASK_USB_SIE_INTF_ADDR_V1_8822B) +#define BIT_SET_USB_SIE_INTF_ADDR_V1_8822B (x, v) \ + (BIT_CLEAR_USB_SIE_INTF_ADDR_V1_8822B(x) | \ + BIT_USB_SIE_INTF_ADDR_V1_8822B(v)) + +#define BIT_SHIFT_USB_SIE_INTF_RD_8822B 8 +#define BIT_MASK_USB_SIE_INTF_RD_8822B 0xff +#define BIT_USB_SIE_INTF_RD_8822B (x) \ + (((x) & BIT_MASK_USB_SIE_INTF_RD_8822B) \ + << BIT_SHIFT_USB_SIE_INTF_RD_8822B) +#define BITS_USB_SIE_INTF_RD_8822B \ + (BIT_MASK_USB_SIE_INTF_RD_8822B << BIT_SHIFT_USB_SIE_INTF_RD_8822B) +#define BIT_CLEAR_USB_SIE_INTF_RD_8822B (x) ((x) & (~BITS_USB_SIE_INTF_RD_8822B)) +#define BIT_GET_USB_SIE_INTF_RD_8822B (x) \ + (((x) >> BIT_SHIFT_USB_SIE_INTF_RD_8822B) & \ + BIT_MASK_USB_SIE_INTF_RD_8822B) +#define BIT_SET_USB_SIE_INTF_RD_8822B (x, v) \ + (BIT_CLEAR_USB_SIE_INTF_RD_8822B(x) | BIT_USB_SIE_INTF_RD_8822B(v)) + +#define BIT_SHIFT_USB_SIE_INTF_WD_8822B 0 +#define BIT_MASK_USB_SIE_INTF_WD_8822B 0xff +#define BIT_USB_SIE_INTF_WD_8822B (x) \ + (((x) & BIT_MASK_USB_SIE_INTF_WD_8822B) \ + << BIT_SHIFT_USB_SIE_INTF_WD_8822B) +#define BITS_USB_SIE_INTF_WD_8822B \ + (BIT_MASK_USB_SIE_INTF_WD_8822B << BIT_SHIFT_USB_SIE_INTF_WD_8822B) +#define BIT_CLEAR_USB_SIE_INTF_WD_8822B (x) ((x) & (~BITS_USB_SIE_INTF_WD_8822B)) +#define BIT_GET_USB_SIE_INTF_WD_8822B (x) \ + (((x) >> BIT_SHIFT_USB_SIE_INTF_WD_8822B) & \ + BIT_MASK_USB_SIE_INTF_WD_8822B) +#define BIT_SET_USB_SIE_INTF_WD_8822B (x, v) \ + (BIT_CLEAR_USB_SIE_INTF_WD_8822B(x) | BIT_USB_SIE_INTF_WD_8822B(v)) + +/* 2 REG_PCIE_MIO_INTF_8822B */ +#define BIT_PCIE_MIO_BYIOREG_8822B BIT(13) +#define BIT_PCIE_MIO_RE_8822B BIT(12) + +#define BIT_SHIFT_PCIE_MIO_WE_8822B 8 +#define BIT_MASK_PCIE_MIO_WE_8822B 0xf +#define BIT_PCIE_MIO_WE_8822B (x) \ + (((x) & BIT_MASK_PCIE_MIO_WE_8822B) << BIT_SHIFT_PCIE_MIO_WE_8822B) +#define BITS_PCIE_MIO_WE_8822B \ + (BIT_MASK_PCIE_MIO_WE_8822B << BIT_SHIFT_PCIE_MIO_WE_8822B) +#define BIT_CLEAR_PCIE_MIO_WE_8822B (x) ((x) & (~BITS_PCIE_MIO_WE_8822B)) +#define BIT_GET_PCIE_MIO_WE_8822B (x) \ + (((x) >> BIT_SHIFT_PCIE_MIO_WE_8822B) & BIT_MASK_PCIE_MIO_WE_8822B) +#define BIT_SET_PCIE_MIO_WE_8822B (x, v) \ + (BIT_CLEAR_PCIE_MIO_WE_8822B(x) | BIT_PCIE_MIO_WE_8822B(v)) + +#define BIT_SHIFT_PCIE_MIO_ADDR_8822B 0 +#define BIT_MASK_PCIE_MIO_ADDR_8822B 0xff +#define BIT_PCIE_MIO_ADDR_8822B (x) \ + (((x) & BIT_MASK_PCIE_MIO_ADDR_8822B) << BIT_SHIFT_PCIE_MIO_ADDR_8822B) +#define BITS_PCIE_MIO_ADDR_8822B \ + (BIT_MASK_PCIE_MIO_ADDR_8822B << BIT_SHIFT_PCIE_MIO_ADDR_8822B) +#define BIT_CLEAR_PCIE_MIO_ADDR_8822B (x) ((x) & (~BITS_PCIE_MIO_ADDR_8822B)) +#define BIT_GET_PCIE_MIO_ADDR_8822B (x) \ + (((x) >> BIT_SHIFT_PCIE_MIO_ADDR_8822B) & BIT_MASK_PCIE_MIO_ADDR_8822B) +#define BIT_SET_PCIE_MIO_ADDR_8822B (x, v) \ + (BIT_CLEAR_PCIE_MIO_ADDR_8822B(x) | BIT_PCIE_MIO_ADDR_8822B(v)) + +/* 2 REG_PCIE_MIO_INTD_8822B */ + +#define BIT_SHIFT_PCIE_MIO_DATA_8822B 0 +#define BIT_MASK_PCIE_MIO_DATA_8822B 0xffffffffL +#define BIT_PCIE_MIO_DATA_8822B (x) \ + (((x) & BIT_MASK_PCIE_MIO_DATA_8822B) << BIT_SHIFT_PCIE_MIO_DATA_8822B) +#define BITS_PCIE_MIO_DATA_8822B \ + (BIT_MASK_PCIE_MIO_DATA_8822B << BIT_SHIFT_PCIE_MIO_DATA_8822B) +#define BIT_CLEAR_PCIE_MIO_DATA_8822B (x) ((x) & (~BITS_PCIE_MIO_DATA_8822B)) +#define BIT_GET_PCIE_MIO_DATA_8822B (x) \ + (((x) >> BIT_SHIFT_PCIE_MIO_DATA_8822B) & BIT_MASK_PCIE_MIO_DATA_8822B) +#define BIT_SET_PCIE_MIO_DATA_8822B (x, v) \ + (BIT_CLEAR_PCIE_MIO_DATA_8822B(x) | BIT_PCIE_MIO_DATA_8822B(v)) + +/* 2 REG_WLRF1_8822B */ + +#define BIT_SHIFT_WLRF1_CTRL_8822B 24 +#define BIT_MASK_WLRF1_CTRL_8822B 0xff +#define BIT_WLRF1_CTRL_8822B (x) \ + (((x) & BIT_MASK_WLRF1_CTRL_8822B) << BIT_SHIFT_WLRF1_CTRL_8822B) +#define BITS_WLRF1_CTRL_8822B \ + (BIT_MASK_WLRF1_CTRL_8822B << BIT_SHIFT_WLRF1_CTRL_8822B) +#define BIT_CLEAR_WLRF1_CTRL_8822B (x) ((x) & (~BITS_WLRF1_CTRL_8822B)) +#define BIT_GET_WLRF1_CTRL_8822B (x) \ + (((x) >> BIT_SHIFT_WLRF1_CTRL_8822B) & BIT_MASK_WLRF1_CTRL_8822B) +#define BIT_SET_WLRF1_CTRL_8822B (x, v) \ + (BIT_CLEAR_WLRF1_CTRL_8822B(x) | BIT_WLRF1_CTRL_8822B(v)) + +/* 2 REG_SYS_CFG1_8822B */ + +#define BIT_SHIFT_TRP_ICFG_8822B 28 +#define BIT_MASK_TRP_ICFG_8822B 0xf +#define BIT_TRP_ICFG_8822B (x) \ + (((x) & BIT_MASK_TRP_ICFG_8822B) << BIT_SHIFT_TRP_ICFG_8822B) +#define BITS_TRP_ICFG_8822B \ + (BIT_MASK_TRP_ICFG_8822B << BIT_SHIFT_TRP_ICFG_8822B) +#define BIT_CLEAR_TRP_ICFG_8822B (x) ((x) & (~BITS_TRP_ICFG_8822B)) +#define BIT_GET_TRP_ICFG_8822B (x) \ + (((x) >> BIT_SHIFT_TRP_ICFG_8822B) & BIT_MASK_TRP_ICFG_8822B) +#define BIT_SET_TRP_ICFG_8822B (x, v) \ + (BIT_CLEAR_TRP_ICFG_8822B(x) | BIT_TRP_ICFG_8822B(v)) + +#define BIT_RF_TYPE_ID_8822B BIT(27) +#define BIT_BD_HCI_SEL_8822B BIT(26) +#define BIT_BD_PKG_SEL_8822B BIT(25) +#define BIT_SPSLDO_SEL_8822B BIT(24) +#define BIT_RTL_ID_8822B BIT(23) +#define BIT_PAD_HWPD_IDN_8822B BIT(22) +#define BIT_TESTMODE_8822B BIT(20) + +#define BIT_SHIFT_VENDOR_ID_8822B 16 +#define BIT_MASK_VENDOR_ID_8822B 0xf +#define BIT_VENDOR_ID_8822B (x) \ + (((x) & BIT_MASK_VENDOR_ID_8822B) << BIT_SHIFT_VENDOR_ID_8822B) +#define BITS_VENDOR_ID_8822B \ + (BIT_MASK_VENDOR_ID_8822B << BIT_SHIFT_VENDOR_ID_8822B) +#define BIT_CLEAR_VENDOR_ID_8822B (x) ((x) & (~BITS_VENDOR_ID_8822B)) +#define BIT_GET_VENDOR_ID_8822B (x) \ + (((x) >> BIT_SHIFT_VENDOR_ID_8822B) & BIT_MASK_VENDOR_ID_8822B) +#define BIT_SET_VENDOR_ID_8822B (x, v) \ + (BIT_CLEAR_VENDOR_ID_8822B(x) | BIT_VENDOR_ID_8822B(v)) + +#define BIT_SHIFT_CHIP_VER_8822B 12 +#define BIT_MASK_CHIP_VER_8822B 0xf +#define BIT_CHIP_VER_8822B (x) \ + (((x) & BIT_MASK_CHIP_VER_8822B) << BIT_SHIFT_CHIP_VER_8822B) +#define BITS_CHIP_VER_8822B \ + (BIT_MASK_CHIP_VER_8822B << BIT_SHIFT_CHIP_VER_8822B) +#define BIT_CLEAR_CHIP_VER_8822B (x) ((x) & (~BITS_CHIP_VER_8822B)) +#define BIT_GET_CHIP_VER_8822B (x) \ + (((x) >> BIT_SHIFT_CHIP_VER_8822B) & BIT_MASK_CHIP_VER_8822B) +#define BIT_SET_CHIP_VER_8822B (x, v) \ + (BIT_CLEAR_CHIP_VER_8822B(x) | BIT_CHIP_VER_8822B(v)) + +#define BIT_BD_MAC3_8822B BIT(11) +#define BIT_BD_MAC1_8822B BIT(10) +#define BIT_BD_MAC2_8822B BIT(9) +#define BIT_SIC_IDLE_8822B BIT(8) +#define BIT_SW_OFFLOAD_EN_8822B BIT(7) +#define BIT_OCP_SHUTDN_8822B BIT(6) +#define BIT_V15_VLD_8822B BIT(5) +#define BIT_PCIRSTB_8822B BIT(4) +#define BIT_PCLK_VLD_8822B BIT(3) +#define BIT_UCLK_VLD_8822B BIT(2) +#define BIT_ACLK_VLD_8822B BIT(1) +#define BIT_XCLK_VLD_8822B BIT(0) + +/* 2 REG_SYS_STATUS1_8822B */ + +#define BIT_SHIFT_RF_RL_ID_8822B 28 +#define BIT_MASK_RF_RL_ID_8822B 0xf +#define BIT_RF_RL_ID_8822B (x) \ + (((x) & BIT_MASK_RF_RL_ID_8822B) << BIT_SHIFT_RF_RL_ID_8822B) +#define BITS_RF_RL_ID_8822B \ + (BIT_MASK_RF_RL_ID_8822B << BIT_SHIFT_RF_RL_ID_8822B) +#define BIT_CLEAR_RF_RL_ID_8822B (x) ((x) & (~BITS_RF_RL_ID_8822B)) +#define BIT_GET_RF_RL_ID_8822B (x) \ + (((x) >> BIT_SHIFT_RF_RL_ID_8822B) & BIT_MASK_RF_RL_ID_8822B) +#define BIT_SET_RF_RL_ID_8822B (x, v) \ + (BIT_CLEAR_RF_RL_ID_8822B(x) | BIT_RF_RL_ID_8822B(v)) + +#define BIT_HPHY_ICFG_8822B BIT(19) + +#define BIT_SHIFT_SEL_0XC0_8822B 16 +#define BIT_MASK_SEL_0XC0_8822B 0x3 +#define BIT_SEL_0XC0_8822B (x) \ + (((x) & BIT_MASK_SEL_0XC0_8822B) << BIT_SHIFT_SEL_0XC0_8822B) +#define BITS_SEL_0XC0_8822B \ + (BIT_MASK_SEL_0XC0_8822B << BIT_SHIFT_SEL_0XC0_8822B) +#define BIT_CLEAR_SEL_0XC0_8822B (x) ((x) & (~BITS_SEL_0XC0_8822B)) +#define BIT_GET_SEL_0XC0_8822B (x) \ + (((x) >> BIT_SHIFT_SEL_0XC0_8822B) & BIT_MASK_SEL_0XC0_8822B) +#define BIT_SET_SEL_0XC0_8822B (x, v) \ + (BIT_CLEAR_SEL_0XC0_8822B(x) | BIT_SEL_0XC0_8822B(v)) + +#define BIT_SHIFT_HCI_SEL_V3_8822B 12 +#define BIT_MASK_HCI_SEL_V3_8822B 0x7 +#define BIT_HCI_SEL_V3_8822B (x) \ + (((x) & BIT_MASK_HCI_SEL_V3_8822B) << BIT_SHIFT_HCI_SEL_V3_8822B) +#define BITS_HCI_SEL_V3_8822B \ + (BIT_MASK_HCI_SEL_V3_8822B << BIT_SHIFT_HCI_SEL_V3_8822B) +#define BIT_CLEAR_HCI_SEL_V3_8822B (x) ((x) & (~BITS_HCI_SEL_V3_8822B)) +#define BIT_GET_HCI_SEL_V3_8822B (x) \ + (((x) >> BIT_SHIFT_HCI_SEL_V3_8822B) & BIT_MASK_HCI_SEL_V3_8822B) +#define BIT_SET_HCI_SEL_V3_8822B (x, v) \ + (BIT_CLEAR_HCI_SEL_V3_8822B(x) | BIT_HCI_SEL_V3_8822B(v)) + +#define BIT_USB_OPERATION_MODE_8822B BIT(10) +#define BIT_BT_PDN_8822B BIT(9) +#define BIT_AUTO_WLPON_8822B BIT(8) +#define BIT_WL_MODE_8822B BIT(7) +#define BIT_PKG_SEL_HCI_8822B BIT(6) + +#define BIT_SHIFT_PAD_HCI_SEL_V1_8822B 3 +#define BIT_MASK_PAD_HCI_SEL_V1_8822B 0x7 +#define BIT_PAD_HCI_SEL_V1_8822B (x) \ + (((x) & BIT_MASK_PAD_HCI_SEL_V1_8822B) \ + << BIT_SHIFT_PAD_HCI_SEL_V1_8822B) +#define BITS_PAD_HCI_SEL_V1_8822B \ + (BIT_MASK_PAD_HCI_SEL_V1_8822B << BIT_SHIFT_PAD_HCI_SEL_V1_8822B) +#define BIT_CLEAR_PAD_HCI_SEL_V1_8822B (x) ((x) & (~BITS_PAD_HCI_SEL_V1_8822B)) +#define BIT_GET_PAD_HCI_SEL_V1_8822B (x) \ + (((x) >> BIT_SHIFT_PAD_HCI_SEL_V1_8822B) & \ + BIT_MASK_PAD_HCI_SEL_V1_8822B) +#define BIT_SET_PAD_HCI_SEL_V1_8822B (x, v) \ + (BIT_CLEAR_PAD_HCI_SEL_V1_8822B(x) | BIT_PAD_HCI_SEL_V1_8822B(v)) + +#define BIT_SHIFT_EFS_HCI_SEL_V1_8822B 0 +#define BIT_MASK_EFS_HCI_SEL_V1_8822B 0x7 +#define BIT_EFS_HCI_SEL_V1_8822B (x) \ + (((x) & BIT_MASK_EFS_HCI_SEL_V1_8822B) \ + << BIT_SHIFT_EFS_HCI_SEL_V1_8822B) +#define BITS_EFS_HCI_SEL_V1_8822B \ + (BIT_MASK_EFS_HCI_SEL_V1_8822B << BIT_SHIFT_EFS_HCI_SEL_V1_8822B) +#define BIT_CLEAR_EFS_HCI_SEL_V1_8822B (x) ((x) & (~BITS_EFS_HCI_SEL_V1_8822B)) +#define BIT_GET_EFS_HCI_SEL_V1_8822B (x) \ + (((x) >> BIT_SHIFT_EFS_HCI_SEL_V1_8822B) & \ + BIT_MASK_EFS_HCI_SEL_V1_8822B) +#define BIT_SET_EFS_HCI_SEL_V1_8822B (x, v) \ + (BIT_CLEAR_EFS_HCI_SEL_V1_8822B(x) | BIT_EFS_HCI_SEL_V1_8822B(v)) + +/* 2 REG_SYS_STATUS2_8822B */ +#define BIT_SIO_ALDN_8822B BIT(19) +#define BIT_USB_ALDN_8822B BIT(18) +#define BIT_PCI_ALDN_8822B BIT(17) +#define BIT_SYS_ALDN_8822B BIT(16) + +#define BIT_SHIFT_EPVID1_8822B 8 +#define BIT_MASK_EPVID1_8822B 0xff +#define BIT_EPVID1_8822B (x) \ + (((x) & BIT_MASK_EPVID1_8822B) << BIT_SHIFT_EPVID1_8822B) +#define BITS_EPVID1_8822B (BIT_MASK_EPVID1_8822B << BIT_SHIFT_EPVID1_8822B) +#define BIT_CLEAR_EPVID1_8822B (x) ((x) & (~BITS_EPVID1_8822B)) +#define BIT_GET_EPVID1_8822B (x) \ + (((x) >> BIT_SHIFT_EPVID1_8822B) & BIT_MASK_EPVID1_8822B) +#define BIT_SET_EPVID1_8822B (x, v) \ + (BIT_CLEAR_EPVID1_8822B(x) | BIT_EPVID1_8822B(v)) + +#define BIT_SHIFT_EPVID0_8822B 0 +#define BIT_MASK_EPVID0_8822B 0xff +#define BIT_EPVID0_8822B (x) \ + (((x) & BIT_MASK_EPVID0_8822B) << BIT_SHIFT_EPVID0_8822B) +#define BITS_EPVID0_8822B (BIT_MASK_EPVID0_8822B << BIT_SHIFT_EPVID0_8822B) +#define BIT_CLEAR_EPVID0_8822B (x) ((x) & (~BITS_EPVID0_8822B)) +#define BIT_GET_EPVID0_8822B (x) \ + (((x) >> BIT_SHIFT_EPVID0_8822B) & BIT_MASK_EPVID0_8822B) +#define BIT_SET_EPVID0_8822B (x, v) \ + (BIT_CLEAR_EPVID0_8822B(x) | BIT_EPVID0_8822B(v)) + +/* 2 REG_SYS_CFG2_8822B */ +#define BIT_HCI_SEL_EMBEDDED_8822B BIT(8) + +#define BIT_SHIFT_HW_ID_8822B 0 +#define BIT_MASK_HW_ID_8822B 0xff +#define BIT_HW_ID_8822B (x) \ + (((x) & BIT_MASK_HW_ID_8822B) << BIT_SHIFT_HW_ID_8822B) +#define BITS_HW_ID_8822B (BIT_MASK_HW_ID_8822B << BIT_SHIFT_HW_ID_8822B) +#define BIT_CLEAR_HW_ID_8822B (x) ((x) & (~BITS_HW_ID_8822B)) +#define BIT_GET_HW_ID_8822B (x) \ + (((x) >> BIT_SHIFT_HW_ID_8822B) & BIT_MASK_HW_ID_8822B) +#define BIT_SET_HW_ID_8822B (x, v) \ + (BIT_CLEAR_HW_ID_8822B(x) | BIT_HW_ID_8822B(v)) + +/* 2 REG_SYS_CFG3_8822B */ +#define BIT_PWC_MA33V_8822B BIT(15) +#define BIT_PWC_MA12V_8822B BIT(14) +#define BIT_PWC_MD12V_8822B BIT(13) +#define BIT_PWC_PD12V_8822B BIT(12) +#define BIT_PWC_UD12V_8822B BIT(11) +#define BIT_ISO_MA2MD_8822B BIT(1) +#define BIT_ISO_MD2PP_8822B BIT(0) + +/* 2 REG_SYS_CFG4_8822B */ + +/* 2 REG_SYS_CFG5_8822B */ +#define BIT_LPS_STATUS_8822B BIT(3) +#define BIT_HCI_TXDMA_BUSY_8822B BIT(2) +#define BIT_HCI_TXDMA_ALLOW_8822B BIT(1) +#define BIT_FW_CTRL_HCI_TXDMA_EN_8822B BIT(0) + +/* 2 REG_CPU_DMEM_CON_8822B */ +#define BIT_WDT_OPT_IOWRAPPER_8822B BIT(19) +#define BIT_ANA_PORT_IDLE_8822B BIT(18) +#define BIT_MAC_PORT_IDLE_8822B BIT(17) +#define BIT_WL_PLATFORM_RST_8822B BIT(16) +#define BIT_WL_SECURITY_CLK_8822B BIT(15) + +#define BIT_SHIFT_CPU_DMEM_CON_8822B 0 +#define BIT_MASK_CPU_DMEM_CON_8822B 0xff +#define BIT_CPU_DMEM_CON_8822B (x) \ + (((x) & BIT_MASK_CPU_DMEM_CON_8822B) << BIT_SHIFT_CPU_DMEM_CON_8822B) +#define BITS_CPU_DMEM_CON_8822B \ + (BIT_MASK_CPU_DMEM_CON_8822B << BIT_SHIFT_CPU_DMEM_CON_8822B) +#define BIT_CLEAR_CPU_DMEM_CON_8822B (x) ((x) & (~BITS_CPU_DMEM_CON_8822B)) +#define BIT_GET_CPU_DMEM_CON_8822B (x) \ + (((x) >> BIT_SHIFT_CPU_DMEM_CON_8822B) & BIT_MASK_CPU_DMEM_CON_8822B) +#define BIT_SET_CPU_DMEM_CON_8822B (x, v) \ + (BIT_CLEAR_CPU_DMEM_CON_8822B(x) | BIT_CPU_DMEM_CON_8822B(v)) + +/* 2 REG_BOOT_REASON_8822B */ + +#define BIT_SHIFT_BOOT_REASON_V1_8822B 0 +#define BIT_MASK_BOOT_REASON_V1_8822B 0x7 +#define BIT_BOOT_REASON_V1_8822B (x) \ + (((x) & BIT_MASK_BOOT_REASON_V1_8822B) \ + << BIT_SHIFT_BOOT_REASON_V1_8822B) +#define BITS_BOOT_REASON_V1_8822B \ + (BIT_MASK_BOOT_REASON_V1_8822B << BIT_SHIFT_BOOT_REASON_V1_8822B) +#define BIT_CLEAR_BOOT_REASON_V1_8822B (x) ((x) & (~BITS_BOOT_REASON_V1_8822B)) +#define BIT_GET_BOOT_REASON_V1_8822B (x) \ + (((x) >> BIT_SHIFT_BOOT_REASON_V1_8822B) & \ + BIT_MASK_BOOT_REASON_V1_8822B) +#define BIT_SET_BOOT_REASON_V1_8822B (x, v) \ + (BIT_CLEAR_BOOT_REASON_V1_8822B(x) | BIT_BOOT_REASON_V1_8822B(v)) + +/* 2 REG_NFCPAD_CTRL_8822B */ +#define BIT_PAD_SHUTDW_8822B BIT(18) +#define BIT_SYSON_NFC_PAD_8822B BIT(17) +#define BIT_NFC_INT_PAD_CTRL_8822B BIT(16) +#define BIT_NFC_RFDIS_PAD_CTRL_8822B BIT(15) +#define BIT_NFC_CLK_PAD_CTRL_8822B BIT(14) +#define BIT_NFC_DATA_PAD_CTRL_8822B BIT(13) +#define BIT_NFC_PAD_PULL_CTRL_8822B BIT(12) + +#define BIT_SHIFT_NFCPAD_IO_SEL_8822B 8 +#define BIT_MASK_NFCPAD_IO_SEL_8822B 0xf +#define BIT_NFCPAD_IO_SEL_8822B (x) \ + (((x) & BIT_MASK_NFCPAD_IO_SEL_8822B) << BIT_SHIFT_NFCPAD_IO_SEL_8822B) +#define BITS_NFCPAD_IO_SEL_8822B \ + (BIT_MASK_NFCPAD_IO_SEL_8822B << BIT_SHIFT_NFCPAD_IO_SEL_8822B) +#define BIT_CLEAR_NFCPAD_IO_SEL_8822B (x) ((x) & (~BITS_NFCPAD_IO_SEL_8822B)) +#define BIT_GET_NFCPAD_IO_SEL_8822B (x) \ + (((x) >> BIT_SHIFT_NFCPAD_IO_SEL_8822B) & BIT_MASK_NFCPAD_IO_SEL_8822B) +#define BIT_SET_NFCPAD_IO_SEL_8822B (x, v) \ + (BIT_CLEAR_NFCPAD_IO_SEL_8822B(x) | BIT_NFCPAD_IO_SEL_8822B(v)) + +#define BIT_SHIFT_NFCPAD_OUT_8822B 4 +#define BIT_MASK_NFCPAD_OUT_8822B 0xf +#define BIT_NFCPAD_OUT_8822B (x) \ + (((x) & BIT_MASK_NFCPAD_OUT_8822B) << BIT_SHIFT_NFCPAD_OUT_8822B) +#define BITS_NFCPAD_OUT_8822B \ + (BIT_MASK_NFCPAD_OUT_8822B << BIT_SHIFT_NFCPAD_OUT_8822B) +#define BIT_CLEAR_NFCPAD_OUT_8822B (x) ((x) & (~BITS_NFCPAD_OUT_8822B)) +#define BIT_GET_NFCPAD_OUT_8822B (x) \ + (((x) >> BIT_SHIFT_NFCPAD_OUT_8822B) & BIT_MASK_NFCPAD_OUT_8822B) +#define BIT_SET_NFCPAD_OUT_8822B (x, v) \ + (BIT_CLEAR_NFCPAD_OUT_8822B(x) | BIT_NFCPAD_OUT_8822B(v)) + +#define BIT_SHIFT_NFCPAD_IN_8822B 0 +#define BIT_MASK_NFCPAD_IN_8822B 0xf +#define BIT_NFCPAD_IN_8822B (x) \ + (((x) & BIT_MASK_NFCPAD_IN_8822B) << BIT_SHIFT_NFCPAD_IN_8822B) +#define BITS_NFCPAD_IN_8822B \ + (BIT_MASK_NFCPAD_IN_8822B << BIT_SHIFT_NFCPAD_IN_8822B) +#define BIT_CLEAR_NFCPAD_IN_8822B (x) ((x) & (~BITS_NFCPAD_IN_8822B)) +#define BIT_GET_NFCPAD_IN_8822B (x) \ + (((x) >> BIT_SHIFT_NFCPAD_IN_8822B) & BIT_MASK_NFCPAD_IN_8822B) +#define BIT_SET_NFCPAD_IN_8822B (x, v) \ + (BIT_CLEAR_NFCPAD_IN_8822B(x) | BIT_NFCPAD_IN_8822B(v)) + +/* 2 REG_HIMR2_8822B */ +#define BIT_BCNDMAINT_P4_MSK_8822B BIT(31) +#define BIT_BCNDMAINT_P3_MSK_8822B BIT(30) +#define BIT_BCNDMAINT_P2_MSK_8822B BIT(29) +#define BIT_BCNDMAINT_P1_MSK_8822B BIT(28) +#define BIT_ATIMEND7_MSK_8822B BIT(22) +#define BIT_ATIMEND6_MSK_8822B BIT(21) +#define BIT_ATIMEND5_MSK_8822B BIT(20) +#define BIT_ATIMEND4_MSK_8822B BIT(19) +#define BIT_ATIMEND3_MSK_8822B BIT(18) +#define BIT_ATIMEND2_MSK_8822B BIT(17) +#define BIT_ATIMEND1_MSK_8822B BIT(16) +#define BIT_TXBCN7OK_MSK_8822B BIT(14) +#define BIT_TXBCN6OK_MSK_8822B BIT(13) +#define BIT_TXBCN5OK_MSK_8822B BIT(12) +#define BIT_TXBCN4OK_MSK_8822B BIT(11) +#define BIT_TXBCN3OK_MSK_8822B BIT(10) +#define BIT_TXBCN2OK_MSK_8822B BIT(9) +#define BIT_TXBCN1OK_MSK_V1_8822B BIT(8) +#define BIT_TXBCN7ERR_MSK_8822B BIT(6) +#define BIT_TXBCN6ERR_MSK_8822B BIT(5) +#define BIT_TXBCN5ERR_MSK_8822B BIT(4) +#define BIT_TXBCN4ERR_MSK_8822B BIT(3) +#define BIT_TXBCN3ERR_MSK_8822B BIT(2) +#define BIT_TXBCN2ERR_MSK_8822B BIT(1) +#define BIT_TXBCN1ERR_MSK_V1_8822B BIT(0) + +/* 2 REG_HISR2_8822B */ +#define BIT_BCNDMAINT_P4_8822B BIT(31) +#define BIT_BCNDMAINT_P3_8822B BIT(30) +#define BIT_BCNDMAINT_P2_8822B BIT(29) +#define BIT_BCNDMAINT_P1_8822B BIT(28) +#define BIT_ATIMEND7_8822B BIT(22) +#define BIT_ATIMEND6_8822B BIT(21) +#define BIT_ATIMEND5_8822B BIT(20) +#define BIT_ATIMEND4_8822B BIT(19) +#define BIT_ATIMEND3_8822B BIT(18) +#define BIT_ATIMEND2_8822B BIT(17) +#define BIT_ATIMEND1_8822B BIT(16) +#define BIT_TXBCN7OK_8822B BIT(14) +#define BIT_TXBCN6OK_8822B BIT(13) +#define BIT_TXBCN5OK_8822B BIT(12) +#define BIT_TXBCN4OK_8822B BIT(11) +#define BIT_TXBCN3OK_8822B BIT(10) +#define BIT_TXBCN2OK_8822B BIT(9) +#define BIT_TXBCN1OK_8822B BIT(8) +#define BIT_TXBCN7ERR_8822B BIT(6) +#define BIT_TXBCN6ERR_8822B BIT(5) +#define BIT_TXBCN5ERR_8822B BIT(4) +#define BIT_TXBCN4ERR_8822B BIT(3) +#define BIT_TXBCN3ERR_8822B BIT(2) +#define BIT_TXBCN2ERR_8822B BIT(1) +#define BIT_TXBCN1ERR_8822B BIT(0) + +/* 2 REG_HIMR3_8822B */ +#define BIT_WDT_PLATFORM_INT_MSK_8822B BIT(18) +#define BIT_WDT_CPU_INT_MSK_8822B BIT(17) +#define BIT_SETH2CDOK_MASK_8822B BIT(16) +#define BIT_H2C_CMD_FULL_MASK_8822B BIT(15) +#define BIT_PWR_INT_127_MASK_8822B BIT(14) +#define BIT_TXSHORTCUT_TXDESUPDATEOK_MASK_8822B BIT(13) +#define BIT_TXSHORTCUT_BKUPDATEOK_MASK_8822B BIT(12) +#define BIT_TXSHORTCUT_BEUPDATEOK_MASK_8822B BIT(11) +#define BIT_TXSHORTCUT_VIUPDATEOK_MAS_8822B BIT(10) +#define BIT_TXSHORTCUT_VOUPDATEOK_MASK_8822B BIT(9) +#define BIT_PWR_INT_127_MASK_V1_8822B BIT(8) +#define BIT_PWR_INT_126TO96_MASK_8822B BIT(7) +#define BIT_PWR_INT_95TO64_MASK_8822B BIT(6) +#define BIT_PWR_INT_63TO32_MASK_8822B BIT(5) +#define BIT_PWR_INT_31TO0_MASK_8822B BIT(4) +#define BIT_DDMA0_LP_INT_MSK_8822B BIT(1) +#define BIT_DDMA0_HP_INT_MSK_8822B BIT(0) + +/* 2 REG_HISR3_8822B */ +#define BIT_WDT_PLATFORM_INT_8822B BIT(18) +#define BIT_WDT_CPU_INT_8822B BIT(17) +#define BIT_SETH2CDOK_8822B BIT(16) +#define BIT_H2C_CMD_FULL_8822B BIT(15) +#define BIT_PWR_INT_127_8822B BIT(14) +#define BIT_TXSHORTCUT_TXDESUPDATEOK_8822B BIT(13) +#define BIT_TXSHORTCUT_BKUPDATEOK_8822B BIT(12) +#define BIT_TXSHORTCUT_BEUPDATEOK_8822B BIT(11) +#define BIT_TXSHORTCUT_VIUPDATEOK_8822B BIT(10) +#define BIT_TXSHORTCUT_VOUPDATEOK_8822B BIT(9) +#define BIT_PWR_INT_127_V1_8822B BIT(8) +#define BIT_PWR_INT_126TO96_8822B BIT(7) +#define BIT_PWR_INT_95TO64_8822B BIT(6) +#define BIT_PWR_INT_63TO32_8822B BIT(5) +#define BIT_PWR_INT_31TO0_8822B BIT(4) +#define BIT_DDMA0_LP_INT_8822B BIT(1) +#define BIT_DDMA0_HP_INT_8822B BIT(0) + +/* 2 REG_SW_MDIO_8822B */ +#define BIT_DIS_TIMEOUT_IO_8822B BIT(24) + +/* 2 REG_SW_FLUSH_8822B */ +#define BIT_FLUSH_HOLDN_EN_8822B BIT(25) +#define BIT_FLUSH_WR_EN_8822B BIT(24) +#define BIT_SW_FLASH_CONTROL_8822B BIT(23) +#define BIT_SW_FLASH_WEN_E_8822B BIT(19) +#define BIT_SW_FLASH_HOLDN_E_8822B BIT(18) +#define BIT_SW_FLASH_SO_E_8822B BIT(17) +#define BIT_SW_FLASH_SI_E_8822B BIT(16) +#define BIT_SW_FLASH_SK_O_8822B BIT(13) +#define BIT_SW_FLASH_CEN_O_8822B BIT(12) +#define BIT_SW_FLASH_WEN_O_8822B BIT(11) +#define BIT_SW_FLASH_HOLDN_O_8822B BIT(10) +#define BIT_SW_FLASH_SO_O_8822B BIT(9) +#define BIT_SW_FLASH_SI_O_8822B BIT(8) +#define BIT_SW_FLASH_WEN_I_8822B BIT(3) +#define BIT_SW_FLASH_HOLDN_I_8822B BIT(2) +#define BIT_SW_FLASH_SO_I_8822B BIT(1) +#define BIT_SW_FLASH_SI_I_8822B BIT(0) + +/* 2 REG_H2C_PKT_READADDR_8822B */ + +#define BIT_SHIFT_H2C_PKT_READADDR_8822B 0 +#define BIT_MASK_H2C_PKT_READADDR_8822B 0x3ffff +#define BIT_H2C_PKT_READADDR_8822B (x) \ + (((x) & BIT_MASK_H2C_PKT_READADDR_8822B) \ + << BIT_SHIFT_H2C_PKT_READADDR_8822B) +#define BITS_H2C_PKT_READADDR_8822B \ + (BIT_MASK_H2C_PKT_READADDR_8822B << BIT_SHIFT_H2C_PKT_READADDR_8822B) +#define BIT_CLEAR_H2C_PKT_READADDR_8822B (x) \ + ((x) & (~BITS_H2C_PKT_READADDR_8822B)) +#define BIT_GET_H2C_PKT_READADDR_8822B (x) \ + (((x) >> BIT_SHIFT_H2C_PKT_READADDR_8822B) & \ + BIT_MASK_H2C_PKT_READADDR_8822B) +#define BIT_SET_H2C_PKT_READADDR_8822B (x, v) \ + (BIT_CLEAR_H2C_PKT_READADDR_8822B(x) | BIT_H2C_PKT_READADDR_8822B(v)) + +/* 2 REG_H2C_PKT_WRITEADDR_8822B */ + +#define BIT_SHIFT_H2C_PKT_WRITEADDR_8822B 0 +#define BIT_MASK_H2C_PKT_WRITEADDR_8822B 0x3ffff +#define BIT_H2C_PKT_WRITEADDR_8822B (x) \ + (((x) & BIT_MASK_H2C_PKT_WRITEADDR_8822B) \ + << BIT_SHIFT_H2C_PKT_WRITEADDR_8822B) +#define BITS_H2C_PKT_WRITEADDR_8822B \ + (BIT_MASK_H2C_PKT_WRITEADDR_8822B << BIT_SHIFT_H2C_PKT_WRITEADDR_8822B) +#define BIT_CLEAR_H2C_PKT_WRITEADDR_8822B (x) \ + ((x) & (~BITS_H2C_PKT_WRITEADDR_8822B)) +#define BIT_GET_H2C_PKT_WRITEADDR_8822B (x) \ + (((x) >> BIT_SHIFT_H2C_PKT_WRITEADDR_8822B) & \ + BIT_MASK_H2C_PKT_WRITEADDR_8822B) +#define BIT_SET_H2C_PKT_WRITEADDR_8822B (x, v) \ + (BIT_CLEAR_H2C_PKT_WRITEADDR_8822B(x) | BIT_H2C_PKT_WRITEADDR_8822B(v)) + +/* 2 REG_MEM_PWR_CRTL_8822B */ +#define BIT_MEM_BB_SD_8822B BIT(17) +#define BIT_MEM_BB_DS_8822B BIT(16) +#define BIT_MEM_BT_DS_8822B BIT(10) +#define BIT_MEM_SDIO_LS_8822B BIT(9) +#define BIT_MEM_SDIO_DS_8822B BIT(8) +#define BIT_MEM_USB_LS_8822B BIT(7) +#define BIT_MEM_USB_DS_8822B BIT(6) +#define BIT_MEM_PCI_LS_8822B BIT(5) +#define BIT_MEM_PCI_DS_8822B BIT(4) +#define BIT_MEM_WLMAC_LS_8822B BIT(3) +#define BIT_MEM_WLMAC_DS_8822B BIT(2) +#define BIT_MEM_WLMCU_LS_8822B BIT(1) +#define BIT_MEM_WLMCU_DS_8822B BIT(0) + +/* 2 REG_FW_DBG0_8822B */ + +#define BIT_SHIFT_FW_DBG0_8822B 0 +#define BIT_MASK_FW_DBG0_8822B 0xffffffffL +#define BIT_FW_DBG0_8822B (x) \ + (((x) & BIT_MASK_FW_DBG0_8822B) << BIT_SHIFT_FW_DBG0_8822B) +#define BITS_FW_DBG0_8822B (BIT_MASK_FW_DBG0_8822B << BIT_SHIFT_FW_DBG0_8822B) +#define BIT_CLEAR_FW_DBG0_8822B (x) ((x) & (~BITS_FW_DBG0_8822B)) +#define BIT_GET_FW_DBG0_8822B (x) \ + (((x) >> BIT_SHIFT_FW_DBG0_8822B) & BIT_MASK_FW_DBG0_8822B) +#define BIT_SET_FW_DBG0_8822B (x, v) \ + (BIT_CLEAR_FW_DBG0_8822B(x) | BIT_FW_DBG0_8822B(v)) + +/* 2 REG_FW_DBG1_8822B */ + +#define BIT_SHIFT_FW_DBG1_8822B 0 +#define BIT_MASK_FW_DBG1_8822B 0xffffffffL +#define BIT_FW_DBG1_8822B (x) \ + (((x) & BIT_MASK_FW_DBG1_8822B) << BIT_SHIFT_FW_DBG1_8822B) +#define BITS_FW_DBG1_8822B (BIT_MASK_FW_DBG1_8822B << BIT_SHIFT_FW_DBG1_8822B) +#define BIT_CLEAR_FW_DBG1_8822B (x) ((x) & (~BITS_FW_DBG1_8822B)) +#define BIT_GET_FW_DBG1_8822B (x) \ + (((x) >> BIT_SHIFT_FW_DBG1_8822B) & BIT_MASK_FW_DBG1_8822B) +#define BIT_SET_FW_DBG1_8822B (x, v) \ + (BIT_CLEAR_FW_DBG1_8822B(x) | BIT_FW_DBG1_8822B(v)) + +/* 2 REG_FW_DBG2_8822B */ + +#define BIT_SHIFT_FW_DBG2_8822B 0 +#define BIT_MASK_FW_DBG2_8822B 0xffffffffL +#define BIT_FW_DBG2_8822B (x) \ + (((x) & BIT_MASK_FW_DBG2_8822B) << BIT_SHIFT_FW_DBG2_8822B) +#define BITS_FW_DBG2_8822B (BIT_MASK_FW_DBG2_8822B << BIT_SHIFT_FW_DBG2_8822B) +#define BIT_CLEAR_FW_DBG2_8822B (x) ((x) & (~BITS_FW_DBG2_8822B)) +#define BIT_GET_FW_DBG2_8822B (x) \ + (((x) >> BIT_SHIFT_FW_DBG2_8822B) & BIT_MASK_FW_DBG2_8822B) +#define BIT_SET_FW_DBG2_8822B (x, v) \ + (BIT_CLEAR_FW_DBG2_8822B(x) | BIT_FW_DBG2_8822B(v)) + +/* 2 REG_FW_DBG3_8822B */ + +#define BIT_SHIFT_FW_DBG3_8822B 0 +#define BIT_MASK_FW_DBG3_8822B 0xffffffffL +#define BIT_FW_DBG3_8822B (x) \ + (((x) & BIT_MASK_FW_DBG3_8822B) << BIT_SHIFT_FW_DBG3_8822B) +#define BITS_FW_DBG3_8822B (BIT_MASK_FW_DBG3_8822B << BIT_SHIFT_FW_DBG3_8822B) +#define BIT_CLEAR_FW_DBG3_8822B (x) ((x) & (~BITS_FW_DBG3_8822B)) +#define BIT_GET_FW_DBG3_8822B (x) \ + (((x) >> BIT_SHIFT_FW_DBG3_8822B) & BIT_MASK_FW_DBG3_8822B) +#define BIT_SET_FW_DBG3_8822B (x, v) \ + (BIT_CLEAR_FW_DBG3_8822B(x) | BIT_FW_DBG3_8822B(v)) + +/* 2 REG_FW_DBG4_8822B */ + +#define BIT_SHIFT_FW_DBG4_8822B 0 +#define BIT_MASK_FW_DBG4_8822B 0xffffffffL +#define BIT_FW_DBG4_8822B (x) \ + (((x) & BIT_MASK_FW_DBG4_8822B) << BIT_SHIFT_FW_DBG4_8822B) +#define BITS_FW_DBG4_8822B (BIT_MASK_FW_DBG4_8822B << BIT_SHIFT_FW_DBG4_8822B) +#define BIT_CLEAR_FW_DBG4_8822B (x) ((x) & (~BITS_FW_DBG4_8822B)) +#define BIT_GET_FW_DBG4_8822B (x) \ + (((x) >> BIT_SHIFT_FW_DBG4_8822B) & BIT_MASK_FW_DBG4_8822B) +#define BIT_SET_FW_DBG4_8822B (x, v) \ + (BIT_CLEAR_FW_DBG4_8822B(x) | BIT_FW_DBG4_8822B(v)) + +/* 2 REG_FW_DBG5_8822B */ + +#define BIT_SHIFT_FW_DBG5_8822B 0 +#define BIT_MASK_FW_DBG5_8822B 0xffffffffL +#define BIT_FW_DBG5_8822B (x) \ + (((x) & BIT_MASK_FW_DBG5_8822B) << BIT_SHIFT_FW_DBG5_8822B) +#define BITS_FW_DBG5_8822B (BIT_MASK_FW_DBG5_8822B << BIT_SHIFT_FW_DBG5_8822B) +#define BIT_CLEAR_FW_DBG5_8822B (x) ((x) & (~BITS_FW_DBG5_8822B)) +#define BIT_GET_FW_DBG5_8822B (x) \ + (((x) >> BIT_SHIFT_FW_DBG5_8822B) & BIT_MASK_FW_DBG5_8822B) +#define BIT_SET_FW_DBG5_8822B (x, v) \ + (BIT_CLEAR_FW_DBG5_8822B(x) | BIT_FW_DBG5_8822B(v)) + +/* 2 REG_FW_DBG6_8822B */ + +#define BIT_SHIFT_FW_DBG6_8822B 0 +#define BIT_MASK_FW_DBG6_8822B 0xffffffffL +#define BIT_FW_DBG6_8822B (x) \ + (((x) & BIT_MASK_FW_DBG6_8822B) << BIT_SHIFT_FW_DBG6_8822B) +#define BITS_FW_DBG6_8822B (BIT_MASK_FW_DBG6_8822B << BIT_SHIFT_FW_DBG6_8822B) +#define BIT_CLEAR_FW_DBG6_8822B (x) ((x) & (~BITS_FW_DBG6_8822B)) +#define BIT_GET_FW_DBG6_8822B (x) \ + (((x) >> BIT_SHIFT_FW_DBG6_8822B) & BIT_MASK_FW_DBG6_8822B) +#define BIT_SET_FW_DBG6_8822B (x, v) \ + (BIT_CLEAR_FW_DBG6_8822B(x) | BIT_FW_DBG6_8822B(v)) + +/* 2 REG_FW_DBG7_8822B */ + +#define BIT_SHIFT_FW_DBG7_8822B 0 +#define BIT_MASK_FW_DBG7_8822B 0xffffffffL +#define BIT_FW_DBG7_8822B (x) \ + (((x) & BIT_MASK_FW_DBG7_8822B) << BIT_SHIFT_FW_DBG7_8822B) +#define BITS_FW_DBG7_8822B (BIT_MASK_FW_DBG7_8822B << BIT_SHIFT_FW_DBG7_8822B) +#define BIT_CLEAR_FW_DBG7_8822B (x) ((x) & (~BITS_FW_DBG7_8822B)) +#define BIT_GET_FW_DBG7_8822B (x) \ + (((x) >> BIT_SHIFT_FW_DBG7_8822B) & BIT_MASK_FW_DBG7_8822B) +#define BIT_SET_FW_DBG7_8822B (x, v) \ + (BIT_CLEAR_FW_DBG7_8822B(x) | BIT_FW_DBG7_8822B(v)) + +/* 2 REG_NOT_VALID_8822B */ + +/* 2 REG_CR_8822B */ + +#define BIT_SHIFT_LBMODE_8822B 24 +#define BIT_MASK_LBMODE_8822B 0x1f +#define BIT_LBMODE_8822B (x) \ + (((x) & BIT_MASK_LBMODE_8822B) << BIT_SHIFT_LBMODE_8822B) +#define BITS_LBMODE_8822B (BIT_MASK_LBMODE_8822B << BIT_SHIFT_LBMODE_8822B) +#define BIT_CLEAR_LBMODE_8822B (x) ((x) & (~BITS_LBMODE_8822B)) +#define BIT_GET_LBMODE_8822B (x) \ + (((x) >> BIT_SHIFT_LBMODE_8822B) & BIT_MASK_LBMODE_8822B) +#define BIT_SET_LBMODE_8822B (x, v) \ + (BIT_CLEAR_LBMODE_8822B(x) | BIT_LBMODE_8822B(v)) + +#define BIT_SHIFT_NETYPE1_8822B 18 +#define BIT_MASK_NETYPE1_8822B 0x3 +#define BIT_NETYPE1_8822B (x) \ + (((x) & BIT_MASK_NETYPE1_8822B) << BIT_SHIFT_NETYPE1_8822B) +#define BITS_NETYPE1_8822B (BIT_MASK_NETYPE1_8822B << BIT_SHIFT_NETYPE1_8822B) +#define BIT_CLEAR_NETYPE1_8822B (x) ((x) & (~BITS_NETYPE1_8822B)) +#define BIT_GET_NETYPE1_8822B (x) \ + (((x) >> BIT_SHIFT_NETYPE1_8822B) & BIT_MASK_NETYPE1_8822B) +#define BIT_SET_NETYPE1_8822B (x, v) \ + (BIT_CLEAR_NETYPE1_8822B(x) | BIT_NETYPE1_8822B(v)) + +#define BIT_SHIFT_NETYPE0_8822B 16 +#define BIT_MASK_NETYPE0_8822B 0x3 +#define BIT_NETYPE0_8822B (x) \ + (((x) & BIT_MASK_NETYPE0_8822B) << BIT_SHIFT_NETYPE0_8822B) +#define BITS_NETYPE0_8822B (BIT_MASK_NETYPE0_8822B << BIT_SHIFT_NETYPE0_8822B) +#define BIT_CLEAR_NETYPE0_8822B (x) ((x) & (~BITS_NETYPE0_8822B)) +#define BIT_GET_NETYPE0_8822B (x) \ + (((x) >> BIT_SHIFT_NETYPE0_8822B) & BIT_MASK_NETYPE0_8822B) +#define BIT_SET_NETYPE0_8822B (x, v) \
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.15.1
Part of the diff is not shown here. View the raw message.
[email protected]
maintainerPATCH v3 9/19 rtlwifi: halmac: add definition of TX/RX descriptor
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
TX/RX descriptor are the headers to describe the packet content.
--- .../realtek/rtlwifi/halmac/halmac_rx_bd_nic.h | 36 ++ .../realtek/rtlwifi/halmac/halmac_rx_desc_chip.h | 100 +++++ .../realtek/rtlwifi/halmac/halmac_rx_desc_nic.h | 123 ++++++ .../realtek/rtlwifi/halmac/halmac_tx_bd_nic.h | 106 +++++ .../realtek/rtlwifi/halmac/halmac_tx_desc_chip.h | 398 +++++++++++++++++++ .../realtek/rtlwifi/halmac/halmac_tx_desc_nic.h | 439 +++++++++++++++++++++ 6 files changed, 1202 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_bd_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_desc_chip.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_desc_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_bd_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_desc_chip.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_desc_nic.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_bd_nic.h new file +36 -0
@@ -0,0 +1,36 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_RX_BD_NIC_H_ +#define _HALMAC_RX_BD_NIC_H_ + +/*TXBD_DW0*/ + +#define GET_RX_BD_RXFAIL (rxbd) LE_BITS_TO_4BYTE(rxbd + 0x00, 31, 1) +#define GET_RX_BD_TOTALRXPKTSIZE (rxbd) LE_BITS_TO_4BYTE(rxbd + 0x00, 16, 13) +#define GET_RX_BD_RXTAG (rxbd) LE_BITS_TO_4BYTE(rxbd + 0x00, 16, 13) +#define GET_RX_BD_FS (rxbd) LE_BITS_TO_4BYTE(rxbd + 0x00, 15, 1) +#define GET_RX_BD_LS (rxbd) LE_BITS_TO_4BYTE(rxbd + 0x00, 14, 1) +#define GET_RX_BD_RXBUFFSIZE (rxbd) LE_BITS_TO_4BYTE(rxbd + 0x00, 0, 14) + +/*TXBD_DW1*/ + +#define GET_RX_BD_PHYSICAL_ADDR_LOW (rxbd) LE_BITS_TO_4BYTE(rxbd + 0x04, 0, 32) + +/*TXBD_DW2*/ + +#define GET_RX_BD_PHYSICAL_ADDR_HIGH (rxbd) LE_BITS_TO_4BYTE(rxbd + 0x08, 0, 32) + +#endif
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_desc_chip.h new file +100 -0
100 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_rx_desc_nic.h new file +123 -0
123 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_bd_nic.h new file +106 -0
106 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_desc_chip.h new file +398 -0
398 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_tx_desc_nic.h new file +439 -0
439 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 10/19 rtlwifi: halmac: add GPIO pin/pinmux definitions
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
GPIO with pinmux can switch to many functions such as LED, UART, JTAG, WoWLAN, etc.
--- .../halmac_88xx/halmac_8822b/halmac_gpio_8822b.c | 847 +++++++++++++++++++++ .../halmac_88xx/halmac_8822b/halmac_gpio_8822b.h | 34 + .../rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.c | 415 ++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.h | 55 ++ .../realtek/rtlwifi/halmac/halmac_gpio_cmd.h | 84 ++ 5 files changed, 1435 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_gpio_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_gpio_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_gpio_cmd.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_gpio_8822b.c new file +847 -0
@@ -0,0 +1,847 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_gpio_8822b.h" +#include "../halmac_gpio_88xx.h" + +/* GPIO0 definition */ +#define GPIO0_BT_GPIO0_8822B \ + {HALMAC_BT_GPIO, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \ + 0x66, BIT(2), BIT(2)} +#define GPIO0_BT_ACT_8822B \ + {HALMAC_BT_PTA, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \ + 0x41, BIT(1), 0} +#define GPIO0_WL_ACT_8822B \ + {HALMAC_WL_PTA, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \ + 0x41, BIT(2), BIT(2)} +#define GPIO0_WLMAC_DBG_GPIO0_8822B \ + {HALMAC_WLMAC_DBG, HALMAC_GPIO0, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0)} +#define GPIO0_WLPHY_DBG_GPIO0_8822B \ + {HALMAC_WLPHY_DBG, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(1)} +#define GPIO0_BT_DBG_GPIO0_8822B \ + {HALMAC_BT_DBG, HALMAC_GPIO0, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)} +#define GPIO0_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO1 definition */ +#define GPIO1_BT_GPIO1_8822B \ + {HALMAC_BT_GPIO, HALMAC_GPIO1, HALMAC_GPIO_IN_OUT, \ + 0x66, BIT(2), BIT(2)} +#define GPIO1_BT_3DD_SYNC_A_8822B \ + {HALMAC_BT_3DDLS_A, HALMAC_GPIO1, HALMAC_GPIO_IN, \ + 0x66, BIT(2), BIT(2)} +#define GPIO1_WL_CK_8822B \ + {HALMAC_BT_PTA, HALMAC_GPIO1, HALMAC_GPIO_OUT, \ + 0x41, BIT(1), 0} +#define GPIO1_BT_CK_8822B \ + {HALMAC_WL_PTA, HALMAC_GPIO1, HALMAC_GPIO_OUT, \ + 0x41, BIT(2), BIT(2)} +#define GPIO1_WLMAC_DBG_GPIO1_8822B \ + {HALMAC_WLMAC_DBG, HALMAC_GPIO1, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0)} +#define GPIO1_WLPHY_DBG_GPIO1_8822B \ + {HALMAC_WLPHY_DBG, HALMAC_GPIO1, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(1)} +#define GPIO1_BT_DBG_GPIO1_8822B \ + {HALMAC_BT_DBG, HALMAC_GPIO1, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)} +#define GPIO1_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO1, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO2 definition */ +#define GPIO2_BT_GPIO2_8822B \ + {HALMAC_BT_GPIO, HALMAC_GPIO2, HALMAC_GPIO_IN_OUT, \ + 0x66, BIT(2), BIT(2)} +#define GPIO2_WL_STATE_8822B \ + {HALMAC_BT_PTA, HALMAC_GPIO2, HALMAC_GPIO_OUT, \ + 0x41, BIT(1), 0} +#define GPIO2_BT_STATE_8822B \ + {HALMAC_WL_PTA, HALMAC_GPIO2, HALMAC_GPIO_OUT, \ + 0x41, BIT(2), BIT(2)} +#define GPIO2_WLMAC_DBG_GPIO2_8822B \ + {HALMAC_WLMAC_DBG, HALMAC_GPIO2, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0)} +#define GPIO2_WLPHY_DBG_GPIO2_8822B \ + {HALMAC_WLPHY_DBG, HALMAC_GPIO2, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(1)} +#define GPIO2_BT_DBG_GPIO2_8822B \ + {HALMAC_BT_DBG, HALMAC_GPIO2, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)} +#define GPIO2_RFE_CTRL_5_8822B \ + {HALMAC_WLPHY_RFE_CTRL2GPIO, HALMAC_GPIO2, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(2), BIT(2)} +#define GPIO2_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO2, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO3 definition */ +#define GPIO3_BT_GPIO3_8822B \ + {HALMAC_BT_GPIO, HALMAC_GPIO3, HALMAC_GPIO_IN_OUT, \ + 0x66, BIT(2), BIT(2)} +#define GPIO3_WL_PRI_8822B \ + {HALMAC_BT_PTA, HALMAC_GPIO3, HALMAC_GPIO_OUT, \ + 0x41, BIT(1), 0} +#define GPIO3_BT_PRI_8822B \ + {HALMAC_WL_PTA, HALMAC_GPIO3, HALMAC_GPIO_OUT, \ + 0x41, BIT(2), BIT(2)} +#define GPIO3_WLMAC_DBG_GPIO3_8822B \ + {HALMAC_WLMAC_DBG, HALMAC_GPIO3, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0)} +#define GPIO3_WLPHY_DBG_GPIO3_8822B \ + {HALMAC_WLPHY_DBG, HALMAC_GPIO3, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(1)} +#define GPIO3_BT_DBG_GPIO3_8822B \ + {HALMAC_BT_DBG, HALMAC_GPIO3, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)} +#define GPIO3_RFE_CTRL_4_8822B \ + {HALMAC_WLPHY_RFE_CTRL2GPIO, HALMAC_GPIO3, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(2), BIT(2)} +#define GPIO3_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO3, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO4 definition */ +#define GPIO4_BT_SPI_D0_8822B \ + {HALMAC_BT_SFLASH, HALMAC_GPIO4, HALMAC_GPIO_IN_OUT, \ + 0x66, BIT(4), BIT(4)} +#define GPIO4_WL_SPI_D0_8822B \ + {HALMAC_WL_SFLASH, HALMAC_GPIO4, HALMAC_GPIO_IN_OUT, \ + 0x42, BIT(3), BIT(3)} +#define GPIO4_SDIO_INT_8822B \ + {HALMAC_SDIO_INT, HALMAC_GPIO4, HALMAC_GPIO_OUT, \ + 0x72, BIT(2), BIT(2)} +#define GPIO4_JTAG_TRST_8822B \ + {HALMAC_JTAG, HALMAC_GPIO4, HALMAC_GPIO_IN, \ + 0x67, BIT(0), BIT(0)} +#define GPIO4_DBG_GNT_WL_8822B \ + {HALMAC_DBG_GNT_WL_BT, HALMAC_GPIO4, HALMAC_GPIO_OUT, \ + 0x73, BIT(3), BIT(3)} +#define GPIO4_WLMAC_DBG_GPIO4_8822B \ + {HALMAC_WLMAC_DBG, HALMAC_GPIO4, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0)} +#define GPIO4_WLPHY_DBG_GPIO4_8822B \ + {HALMAC_WLPHY_DBG, HALMAC_GPIO4, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(1)} +#define GPIO4_BT_DBG_GPIO4_8822B \ + {HALMAC_BT_DBG, HALMAC_GPIO4, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)} +#define GPIO4_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO4, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO5 definition */ +#define GPIO5_BT_SPI_D1_8822B \ + {HALMAC_BT_SFLASH, HALMAC_GPIO5, HALMAC_GPIO_IN_OUT, \ + 0x66, BIT(4), BIT(4)} +#define GPIO5_WL_SPI_D1_8822B \ + {HALMAC_WL_SFLASH, HALMAC_GPIO5, HALMAC_GPIO_IN_OUT, \ + 0x42, BIT(3), BIT(3)} +#define GPIO5_JTAG_TDI_8822B \ + {HALMAC_JTAG, HALMAC_GPIO5, HALMAC_GPIO_IN, \ + 0x67, BIT(0), BIT(0)} +#define GPIO5_DBG_GNT_BT_8822B \ + {HALMAC_DBG_GNT_WL_BT, HALMAC_GPIO5, HALMAC_GPIO_OUT, \ + 0x73, BIT(3), BIT(3)} +#define GPIO5_WLMAC_DBG_GPIO5_8822B \ + {HALMAC_WLMAC_DBG, HALMAC_GPIO5, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0)} +#define GPIO5_WLPHY_DBG_GPIO5_8822B \ + {HALMAC_WLPHY_DBG, HALMAC_GPIO5, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(1)} +#define GPIO5_BT_DBG_GPIO5_8822B \ + {HALMAC_BT_DBG, HALMAC_GPIO5, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)} +#define GPIO5_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO5, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO6 definition */ +#define GPIO6_BT_SPI_D2_8822B \ + {HALMAC_BT_SFLASH, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \ + 0x66, BIT(4), BIT(4)} +#define GPIO6_WL_SPI_D2_8822B \ + {HALMAC_WL_SFLASH, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \ + 0x42, BIT(3), BIT(3)} +#define GPIO6_EEDO_8822B \ + {HALMAC_EEPROM, HALMAC_GPIO6, HALMAC_GPIO_IN, \ + 0x40, BIT(4), BIT(4)} +#define GPIO6_JTAG_TDO_8822B \ + {HALMAC_JTAG, HALMAC_GPIO6, HALMAC_GPIO_OUT, \ + 0x67, BIT(0), BIT(0)} +#define GPIO6_BT_3DD_SYNC_B_8822B \ + {HALMAC_BT_3DDLS_B, HALMAC_GPIO6, HALMAC_GPIO_IN, \ + 0x67, BIT(1), BIT(1)} +#define GPIO6_BT_GPIO18_8822B \ + {HALMAC_BT_GPIO, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \ + 0x67, BIT(1), BIT(1)} +#define GPIO6_SIN_8822B \ + {HALMAC_WL_UART, HALMAC_GPIO6, HALMAC_GPIO_IN, \ + 0x41, BIT(0), BIT(0)} +#define GPIO6_WLMAC_DBG_GPIO6_8822B \ + {HALMAC_WLMAC_DBG, HALMAC_GPIO6, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0)} +#define GPIO6_WLPHY_DBG_GPIO6_8822B \ + {HALMAC_WLPHY_DBG, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(1)} +#define GPIO6_BT_DBG_GPIO6_8822B \ + {HALMAC_BT_DBG, HALMAC_GPIO6, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)} +#define GPIO6_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO7 definition */ +#define GPIO7_BT_SPI_D3_8822B \ + {HALMAC_BT_SFLASH, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \ + 0x66, BIT(4), BIT(4)} +#define GPIO7_WL_SPI_D3_8822B \ + {HALMAC_WL_SFLASH, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \ + 0x42, BIT(3), BIT(3)} +#define GPIO7_EEDI_8822B \ + {HALMAC_EEPROM, HALMAC_GPIO7, HALMAC_GPIO_OUT, \ + 0x40, BIT(4), BIT(4)} +#define GPIO7_JTAG_TMS_8822B \ + {HALMAC_JTAG, HALMAC_GPIO7, HALMAC_GPIO_IN, \ + 0x67, BIT(0), BIT(0)} +#define GPIO7_BT_GPIO16_8822B \ + {HALMAC_BT_GPIO, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \ + 0x67, BIT(2), BIT(2)} +#define GPIO7_SOUT_8822B \ + {HALMAC_WL_UART, HALMAC_GPIO7, HALMAC_GPIO_OUT, \ + 0x41, BIT(0), BIT(0)} +#define GPIO7_WLMAC_DBG_GPIO7_8822B \ + {HALMAC_WLMAC_DBG, HALMAC_GPIO7, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0)} +#define GPIO7_WLPHY_DBG_GPIO7_8822B \ + {HALMAC_WLPHY_DBG, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(1)} +#define GPIO7_BT_DBG_GPIO7_8822B \ + {HALMAC_BT_DBG, HALMAC_GPIO7, HALMAC_GPIO_OUT, \ + 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)} +#define GPIO7_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO8 definition */ +#define GPIO8_WL_EXT_WOL_8822B \ + {HALMAC_WL_HW_EXTWOL, HALMAC_GPIO8, HALMAC_GPIO_IN, \ + 0x4a, BIT(0) | BIT(1), BIT(0) | BIT(1)} +#define GPIO8_WL_LED_8822B \ + {HALMAC_WL_LED, HALMAC_GPIO8, HALMAC_GPIO_OUT, \ + 0x4e, BIT(5), BIT(5)} +#define GPIO8_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO8, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO9 definition */ +#define GPIO9_DIS_WL_N_8822B \ + {HALMAC_WL_HWPDN, HALMAC_GPIO9, HALMAC_GPIO_IN, \ + 0x68, BIT(3) | BIT(0), BIT(3) | BIT(0)} +#define GPIO9_WL_EXT_WOL_8822B \ + {HALMAC_WL_HW_EXTWOL, HALMAC_GPIO9, HALMAC_GPIO_IN, \ + 0x4a, BIT(0) | BIT(1), BIT(0)} +#define GPIO9_USCTS0_8822B \ + {HALMAC_UART0, HALMAC_GPIO9, HALMAC_GPIO_IN, \ + 0x66, BIT(6), BIT(6)} +#define GPIO9_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO9, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO10 definition */ +#define GPIO10_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO10, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO11 definition */ +#define GPIO11_DIS_BT_N_8822B \ + {HALMAC_BT_HWPDN, HALMAC_GPIO11, HALMAC_GPIO_IN, \ + 0x6a, BIT(0), BIT(0)} +#define GPIO11_USOUT0_8822B \ + {HALMAC_UART0, HALMAC_GPIO11, HALMAC_GPIO_OUT, \ + 0x66, BIT(6), BIT(6)} +#define GPIO11_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO11, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO12 definition */ +#define GPIO12_USIN0_8822B \ + {HALMAC_UART0, HALMAC_GPIO12, HALMAC_GPIO_IN, \ + 0x66, BIT(6), BIT(6)} +#define GPIO12_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO12, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO13 definition */ +#define GPIO13_BT_WAKE_8822B \ + {HALMAC_GPIO13_14_WL_CTRL_EN, HALMAC_GPIO13, HALMAC_GPIO_IN, \ + 0x4e, BIT(6), BIT(6)} +#define GPIO13_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO13, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO14 definition */ +#define GPIO14_UART_WAKE_8822B \ + {HALMAC_GPIO13_14_WL_CTRL_EN, HALMAC_GPIO14, HALMAC_GPIO_OUT, \ + 0x4e, BIT(6), BIT(6)} +#define GPIO14_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO14, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +/* GPIO15 definition */ +#define GPIO15_EXT_XTAL_8822B \ + {HALMAC_EXT_XTAL, HALMAC_GPIO15, HALMAC_GPIO_OUT, \ + 0x66, BIT(7), BIT(7)} +#define GPIO15_SW_IO_8822B \ + {HALMAC_SW_IO, HALMAC_GPIO15, HALMAC_GPIO_IN_OUT, \ + 0x40, BIT(1) | BIT(0), 0} + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO0_8822B [] = { +GPIO0_BT_GPIO0_8822B , +GPIO0_BT_ACT_8822B , +GPIO0_WL_ACT_8822B , +GPIO0_WLMAC_DBG_GPIO0_8822B , +GPIO0_WLPHY_DBG_GPIO0_8822B , +GPIO0_BT_DBG_GPIO0_8822B , +GPIO0_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO1_8822B [] = { +GPIO1_BT_GPIO1_8822B , +GPIO1_BT_3DD_SYNC_A_8822B , +GPIO1_WL_CK_8822B , +GPIO1_BT_CK_8822B , +GPIO1_WLMAC_DBG_GPIO1_8822B , +GPIO1_WLPHY_DBG_GPIO1_8822B , +GPIO1_BT_DBG_GPIO1_8822B , +GPIO1_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO2_8822B [] = { +GPIO2_BT_GPIO2_8822B , +GPIO2_WL_STATE_8822B , +GPIO2_BT_STATE_8822B , +GPIO2_WLMAC_DBG_GPIO2_8822B , +GPIO2_WLPHY_DBG_GPIO2_8822B , +GPIO2_BT_DBG_GPIO2_8822B , +GPIO2_RFE_CTRL_5_8822B , +GPIO2_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO3_8822B [] = { +GPIO3_BT_GPIO3_8822B , +GPIO3_WL_PRI_8822B , +GPIO3_BT_PRI_8822B , +GPIO3_WLMAC_DBG_GPIO3_8822B , +GPIO3_WLPHY_DBG_GPIO3_8822B , +GPIO3_BT_DBG_GPIO3_8822B , +GPIO3_RFE_CTRL_4_8822B , +GPIO3_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO4_8822B [] = { +GPIO4_BT_SPI_D0_8822B , +GPIO4_WL_SPI_D0_8822B , +GPIO4_SDIO_INT_8822B , +GPIO4_JTAG_TRST_8822B , +GPIO4_DBG_GNT_WL_8822B , +GPIO4_WLMAC_DBG_GPIO4_8822B , +GPIO4_WLPHY_DBG_GPIO4_8822B , +GPIO4_BT_DBG_GPIO4_8822B , +GPIO4_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO5_8822B [] = { +GPIO5_BT_SPI_D1_8822B , +GPIO5_WL_SPI_D1_8822B , +GPIO5_JTAG_TDI_8822B , +GPIO5_DBG_GNT_BT_8822B , +GPIO5_WLMAC_DBG_GPIO5_8822B , +GPIO5_WLPHY_DBG_GPIO5_8822B , +GPIO5_BT_DBG_GPIO5_8822B , +GPIO5_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO6_8822B [] = { +GPIO6_BT_SPI_D2_8822B , +GPIO6_WL_SPI_D2_8822B , +GPIO6_EEDO_8822B , +GPIO6_JTAG_TDO_8822B , +GPIO6_BT_3DD_SYNC_B_8822B , +GPIO6_BT_GPIO18_8822B , +GPIO6_SIN_8822B , +GPIO6_WLMAC_DBG_GPIO6_8822B , +GPIO6_WLPHY_DBG_GPIO6_8822B , +GPIO6_BT_DBG_GPIO6_8822B , +GPIO6_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO7_8822B [] = { +GPIO7_BT_SPI_D3_8822B , +GPIO7_WL_SPI_D3_8822B , +GPIO7_EEDI_8822B , +GPIO7_JTAG_TMS_8822B , +GPIO7_BT_GPIO16_8822B , +GPIO7_SOUT_8822B , +GPIO7_WLMAC_DBG_GPIO7_8822B , +GPIO7_WLPHY_DBG_GPIO7_8822B , +GPIO7_BT_DBG_GPIO7_8822B , +GPIO7_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO8_8822B [] = { +GPIO8_WL_EXT_WOL_8822B , +GPIO8_WL_LED_8822B , +GPIO8_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO9_8822B [] = { +GPIO9_DIS_WL_N_8822B , +GPIO9_WL_EXT_WOL_8822B , +GPIO9_USCTS0_8822B , +GPIO9_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO10_8822B [] = { +GPIO10_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO11_8822B [] = { +GPIO11_DIS_BT_N_8822B , +GPIO11_USOUT0_8822B , +GPIO11_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO12_8822B [] = { +GPIO12_USIN0_8822B , +GPIO12_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO13_8822B [] = { +GPIO13_BT_WAKE_8822B , +GPIO13_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO14_8822B [] = { +GPIO14_UART_WAKE_8822B , +GPIO14_SW_IO_8822B +}; + +static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO15_8822B [] = { +GPIO15_EXT_XTAL_8822B , +GPIO15_SW_IO_8822B +}; + +static enum halmac_ret_status +get_pinmux_list_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func, +const struct halmac_gpio_pimux_list **list, +u32 *list_size,u32 *gpio_id); + +static enum halmac_ret_status +chk_pinmux_valid_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func); + +/** +* pinmux_get_func_8822b() -get current gpio status +* @adapter : the adapter of halmac +* @gpio_func : gpio function +* @enable : function is enable(1) or disable(0) +* Author : Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +pinmux_get_func_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func,u8 *enable) +{ +u32 list_size; +u32 cur_func; +u32 gpio_id; +enum halmac_ret_status status; +const struct halmac_gpio_pimux_list *list =NULL ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + status =get_pinmux_list_8822b (adapter, gpio_func, &list, &list_size, + &gpio_id); +if (status !=HALMAC_RET_SUCCESS ) +return status; + + status =pinmux_parser_88xx (adapter, list, list_size, gpio_id, + &cur_func); +if (status !=HALMAC_RET_SUCCESS ) +return status; + +switch (gpio_func) { +case HALMAC_GPIO_FUNC_WL_LED : + *enable = (cur_func ==HALMAC_WL_LED ) ?1 :0 ; +break ; +case HALMAC_GPIO_FUNC_SDIO_INT : + *enable = (cur_func ==HALMAC_SDIO_INT ) ?1 :0 ; +break ; +case HALMAC_GPIO_FUNC_BT_HOST_WAKE1 : +case HALMAC_GPIO_FUNC_BT_DEV_WAKE1 : + *enable = (cur_func ==HALMAC_GPIO13_14_WL_CTRL_EN ) ?1 :0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_0 : +case HALMAC_GPIO_FUNC_SW_IO_1 : +case HALMAC_GPIO_FUNC_SW_IO_2 : +case HALMAC_GPIO_FUNC_SW_IO_3 : +case HALMAC_GPIO_FUNC_SW_IO_4 : +case HALMAC_GPIO_FUNC_SW_IO_5 : +case HALMAC_GPIO_FUNC_SW_IO_6 : +case HALMAC_GPIO_FUNC_SW_IO_7 : +case HALMAC_GPIO_FUNC_SW_IO_8 : +case HALMAC_GPIO_FUNC_SW_IO_9 : +case HALMAC_GPIO_FUNC_SW_IO_10 : +case HALMAC_GPIO_FUNC_SW_IO_11 : +case HALMAC_GPIO_FUNC_SW_IO_12 : +case HALMAC_GPIO_FUNC_SW_IO_13 : +case HALMAC_GPIO_FUNC_SW_IO_14 : +case HALMAC_GPIO_FUNC_SW_IO_15 : + *enable = (cur_func ==HALMAC_SW_IO ) ?1 :0 ; +break ; +default : + *enable =0 ; +return HALMAC_RET_GET_PINMUX_ERR ; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* pinmux_set_func_8822b() -set gpio function +* @adapter : the adapter of halmac +* @gpio_func : gpio function +* Author : Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +pinmux_set_func_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func) +{ +u32 list_size; +u32 gpio_id; +enum halmac_ret_status status; +const struct halmac_gpio_pimux_list *list =NULL ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"func name : %d\n" , gpio_func); + + status =chk_pinmux_valid_8822b (adapter, gpio_func); +if (status !=HALMAC_RET_SUCCESS ) +return status; + + status =get_pinmux_list_8822b (adapter, gpio_func, &list, &list_size, + &gpio_id); +if (status !=HALMAC_RET_SUCCESS ) +return status; + + status =pinmux_switch_88xx (adapter, list, list_size, gpio_id, + gpio_func); +if (status !=HALMAC_RET_SUCCESS ) +return status; + + status =pinmux_record_88xx (adapter, gpio_func,1 ); +if (status !=HALMAC_RET_SUCCESS ) +return status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* pinmux_free_func_8822b() -free locked gpio function +* @adapter : the adapter of halmac +* @gpio_func : gpio function +* Author : Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +pinmux_free_func_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func) +{ +struct halmac_pinmux_info *info = &adapter->pinmux_info; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +switch (gpio_func) { +case HALMAC_GPIO_FUNC_SW_IO_0 : + info->sw_io_0 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_1 : + info->sw_io_1 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_2 : + info->sw_io_2 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_3 : + info->sw_io_3 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_4 : +case HALMAC_GPIO_FUNC_SDIO_INT : + info->sw_io_4 =0 ; + info->sdio_int =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_5 : + info->sw_io_5 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_6 : + info->sw_io_6 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_7 : + info->sw_io_7 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_8 : +case HALMAC_GPIO_FUNC_WL_LED : + info->sw_io_8 =0 ; + info->wl_led =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_9 : + info->sw_io_9 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_10 : + info->sw_io_10 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_11 : + info->sw_io_11 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_12 : + info->sw_io_12 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_13 : +case HALMAC_GPIO_FUNC_BT_DEV_WAKE1 : + info->bt_dev_wake =0 ; + info->sw_io_13 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_14 : +case HALMAC_GPIO_FUNC_BT_HOST_WAKE1 : + info->bt_host_wake =0 ; + info->sw_io_14 =0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_15 : + info->sw_io_15 =0 ; +break ; +default : +return HALMAC_RET_SWITCH_CASE_ERROR ; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"func : %X\n" , + gpio_func); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +get_pinmux_list_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func, +const struct halmac_gpio_pimux_list **list, +u32 *list_size,u32 *gpio_id) +{ +switch (gpio_func) { +case HALMAC_GPIO_FUNC_SW_IO_0 : + *list =PINMUX_LIST_GPIO0_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO0_8822B ); + *gpio_id =HALMAC_GPIO0 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_1 : + *list =PINMUX_LIST_GPIO1_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO1_8822B ); + *gpio_id =HALMAC_GPIO1 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_2 : + *list =PINMUX_LIST_GPIO2_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO2_8822B ); + *gpio_id =HALMAC_GPIO2 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_3 : + *list =PINMUX_LIST_GPIO3_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO3_8822B ); + *gpio_id =HALMAC_GPIO3 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_4 : +case HALMAC_GPIO_FUNC_SDIO_INT : + *list =PINMUX_LIST_GPIO4_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO4_8822B ); + *gpio_id =HALMAC_GPIO4 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_5 : + *list =PINMUX_LIST_GPIO5_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO5_8822B ); + *gpio_id =HALMAC_GPIO5 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_6 : + *list =PINMUX_LIST_GPIO6_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO6_8822B ); + *gpio_id =HALMAC_GPIO6 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_7 : + *list =PINMUX_LIST_GPIO7_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO7_8822B ); + *gpio_id =HALMAC_GPIO7 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_8 : +case HALMAC_GPIO_FUNC_WL_LED : + *list =PINMUX_LIST_GPIO8_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO8_8822B ); + *gpio_id =HALMAC_GPIO8 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_9 : + *list =PINMUX_LIST_GPIO9_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO9_8822B ); + *gpio_id =HALMAC_GPIO9 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_10 : + *list =PINMUX_LIST_GPIO10_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO10_8822B ); + *gpio_id =HALMAC_GPIO10 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_11 : + *list =PINMUX_LIST_GPIO11_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO11_8822B ); + *gpio_id =HALMAC_GPIO11 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_12 : + *list =PINMUX_LIST_GPIO12_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO12_8822B ); + *gpio_id =HALMAC_GPIO12 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_13 : +case HALMAC_GPIO_FUNC_BT_DEV_WAKE1 : + *list =PINMUX_LIST_GPIO13_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO13_8822B ); + *gpio_id =HALMAC_GPIO13 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_14 : +case HALMAC_GPIO_FUNC_BT_HOST_WAKE1 : + *list =PINMUX_LIST_GPIO14_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO14_8822B ); + *gpio_id =HALMAC_GPIO14 ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_15 : + *list =PINMUX_LIST_GPIO15_8822B ; + *list_size =ARRAY_SIZE (PINMUX_LIST_GPIO15_8822B ); + *gpio_id =HALMAC_GPIO15 ; +break ; +default : +return HALMAC_RET_SWITCH_CASE_ERROR ; + } + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +chk_pinmux_valid_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func) +{ +struct halmac_pinmux_info *info = &adapter->pinmux_info; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + +switch (gpio_func) { +case HALMAC_GPIO_FUNC_SW_IO_0 : +if (info->sw_io_0 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_1 : +if (info->sw_io_1 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_2 : +if (info->sw_io_2 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_3 : +if (info->sw_io_3 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_4 : +case HALMAC_GPIO_FUNC_SDIO_INT : +if (info->sw_io_4 ==1 || info->sdio_int ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_5 : +if (info->sw_io_5 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_6 : +if (info->sw_io_6 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_7 : +if (info->sw_io_7 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_8 : +case HALMAC_GPIO_FUNC_WL_LED : +if (info->sw_io_8 ==1 || info->wl_led ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_9 : +if (info->sw_io_9 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_10 : +if (info->sw_io_10 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_11 : +if (info->sw_io_11 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_12 : +if (info->sw_io_12 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_13 : +case HALMAC_GPIO_FUNC_BT_DEV_WAKE1 : +if (info->sw_io_13 ==1 || info->bt_dev_wake ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_14 : +case HALMAC_GPIO_FUNC_BT_HOST_WAKE1 : +if (info->sw_io_14 ==1 || info->bt_host_wake ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +case HALMAC_GPIO_FUNC_SW_IO_15 : +if (info->sw_io_15 ==1 ) + status =HALMAC_RET_PINMUX_USED ; +break ; +default : +return HALMAC_RET_SWITCH_CASE_ERROR ; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"chk_pinmux_valid func : %X status : %X\n" , gpio_func, status); + +return status; +}
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_gpio_8822b.h new file +34 -0
@@ -0,0 +1,34 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_GPIO_8822B_H_ +#define _HALMAC_GPIO_8822B_H_ + +#include "../../halmac_api.h" +#include "../../halmac_gpio_cmd.h" + +enum halmac_ret_status +pinmux_get_func_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func,u8 *enable); + +enum halmac_ret_status +pinmux_set_func_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func); + +enum halmac_ret_status +pinmux_free_func_8822b (struct halmac_adapter *adapter, +enum halmac_gpio_func gpio_func); + +#endif /* _HALMAC_GPIO_8822B_H_ */
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.c new file +415 -0
415 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_gpio_88xx.h new file +55 -0
55 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_gpio_cmd.h new file +84 -0
84 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 11/19 rtlwifi: halmac: add power sequence to turn on/off wifi card
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Define power sequence command, and fill the sequences of 8822b.
--- .../halmac_8822b/halmac_pwr_seq_8822b.c | 396 +++++++++++++++++++++ .../halmac_8822b/halmac_pwr_seq_8822b.h | 26 ++ .../realtek/rtlwifi/halmac/halmac_pwr_seq_cmd.h | 98 +++++ 3 files changed, 520 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pwr_seq_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pwr_seq_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_pwr_seq_cmd.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pwr_seq_8822b.c new file +396 -0
@@ -0,0 +1,396 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_pwr_seq_8822b.h" + +static struct halmac_wlan_pwr_cfg TRANS_CARDDIS_TO_CARDEMU_8822B [] = { +/* { offset, cut_msk, interface_msk, base|cmd, msk, value } */ + {0x0086 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_SDIO , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),0 }, + {0x0086 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_SDIO , +HALMAC_PWR_CMD_POLLING ,BIT (1 ),BIT (1 )}, + {0x004A , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),0 }, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (3 ) |BIT (4 ) |BIT (7 ),0 }, + {0x0300 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_PCI_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0 }, + {0x0301 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_PCI_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0 }, + {0xFFFF , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +0 , +HALMAC_PWR_CMD_END ,0 ,0 }, +}; + +static struct halmac_wlan_pwr_cfg TRANS_CARDEMU_TO_ACT_8822B [] = { +/* { offset, cut_msk, interface_msk, base|cmd, msk, value } */ + {0x0012 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (1 ),0 }, + {0x0012 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),BIT (0 )}, + {0x0020 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK |HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),BIT (0 )}, + {0x0001 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK |HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_DELAY ,1 ,HALMAC_PWR_DELAY_MS }, + {0x0000 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK |HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (5 ),0 }, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE , (BIT (4 ) |BIT (3 ) |BIT (2 )),0 }, + {0x0075 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_PCI_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),BIT (0 )}, + {0x0006 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_POLLING ,BIT (1 ),BIT (1 )}, + {0x0075 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_PCI_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),0 }, + {0xFF1A , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0 }, + {0x0006 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),BIT (0 )}, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (7 ),0 }, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE , (BIT (4 ) |BIT (3 )),0 }, + {0x10C3 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),BIT (0 )}, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),BIT (0 )}, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_POLLING ,BIT (0 ),0 }, + {0x0020 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (3 ),BIT (3 )}, + {0x10A8 , +HALMAC_PWR_CUT_C_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0 }, + {0x10A9 , +HALMAC_PWR_CUT_C_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0xef }, + {0x10AA , +HALMAC_PWR_CUT_C_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0x0c }, + {0x0068 , +HALMAC_PWR_CUT_C_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (4 ),BIT (4 )}, + {0x0029 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0xF9 }, + {0x0024 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (2 ),0 }, + {0x0074 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_PCI_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (5 ),BIT (5 )}, + {0x00AF , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (5 ),BIT (5 )}, + {0xFFFF , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +0 , +HALMAC_PWR_CMD_END ,0 ,0 }, +}; + +static struct halmac_wlan_pwr_cfg TRANS_ACT_TO_CARDEMU_8822B [] = { +/* { offset, cut_msk, interface_msk, base|cmd, msk, value } */ + {0x0003 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (2 ),0 }, + {0x0093 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (3 ),0 }, + {0x001F , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0 }, + {0x00EF , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0 }, + {0xFF1A , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0x30 }, + {0x0049 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (1 ),0 }, + {0x0006 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),BIT (0 )}, + {0x0002 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (1 ),0 }, + {0x10C3 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),0 }, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (1 ),BIT (1 )}, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_POLLING ,BIT (1 ),0 }, + {0x0020 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (3 ),0 }, + {0x0000 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK |HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (5 ),BIT (5 )}, + {0xFFFF , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +0 , +HALMAC_PWR_CMD_END ,0 ,0 }, +}; + +static struct halmac_wlan_pwr_cfg TRANS_CARDEMU_TO_CARDDIS_8822B [] = { +/* { offset, cut_msk, interface_msk, base|cmd, msk, value } */ + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (7 ),BIT (7 )}, + {0x0007 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK |HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,0xFF ,0x20 }, + {0x0067 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (5 ),0 }, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK |HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (3 ) |BIT (4 ),BIT (3 )}, + {0x0005 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_PCI_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (2 ),BIT (2 )}, + {0x004A , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),0 }, + {0x0067 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (5 ),0 }, + {0x0067 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (4 ),0 }, + {0x004F , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),0 }, + {0x0067 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (1 ),0 }, + {0x0046 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (6 ),BIT (6 )}, + {0x0067 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (2 ),0 }, + {0x0046 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (7 ),BIT (7 )}, + {0x0062 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (4 ),BIT (4 )}, + {0x0081 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (7 ),0 }, + {0x0086 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_SDIO , +HALMAC_PWR_CMD_WRITE ,BIT (0 ),BIT (0 )}, + {0x0086 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_SDIO , +HALMAC_PWR_CMD_POLLING ,BIT (1 ),0 }, + {0x0090 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_USB_MSK |HALMAC_PWR_INTF_PCI_MSK , +HALMAC_PWR_ADDR_MAC , +HALMAC_PWR_CMD_WRITE ,BIT (1 ),0 }, + {0x0044 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_SDIO , +HALMAC_PWR_CMD_WRITE ,0xFF ,0 }, + {0x0040 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_SDIO , +HALMAC_PWR_CMD_WRITE ,0xFF ,0x90 }, + {0x0041 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_SDIO , +HALMAC_PWR_CMD_WRITE ,0xFF ,0x00 }, + {0x0042 , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_SDIO_MSK , +HALMAC_PWR_ADDR_SDIO , +HALMAC_PWR_CMD_WRITE ,0xFF ,0x04 }, + {0xFFFF , +HALMAC_PWR_CUT_ALL_MSK , +HALMAC_PWR_INTF_ALL_MSK , +0 , +HALMAC_PWR_CMD_END ,0 ,0 }, +}; + +/* Card Enable Array */ +struct halmac_wlan_pwr_cfg *card_en_flow_8822b[] = { +TRANS_CARDDIS_TO_CARDEMU_8822B , +TRANS_CARDEMU_TO_ACT_8822B , +NULL +}; + +/* Card Disable Array */ +struct halmac_wlan_pwr_cfg *card_dis_flow_8822b[] = { +TRANS_ACT_TO_CARDEMU_8822B , +TRANS_CARDEMU_TO_CARDDIS_8822B , +NULL +};
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pwr_seq_8822b.h new file +26 -0
@@ -0,0 +1,26 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef HALMAC_POWER_SEQUENCE_8822B +#define HALMAC_POWER_SEQUENCE_8822B + +#include "../../halmac_pwr_seq_cmd.h" + +#define HALMAC_8822B_PWR_SEQ_VER "V25" + +extern struct halmac_wlan_pwr_cfg *card_en_flow_8822b[]; +extern struct halmac_wlan_pwr_cfg *card_dis_flow_8822b[]; + +#endif
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_pwr_seq_cmd.h new file +98 -0
98 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 12/19 rtlwifi: halmac: access efuse through halmac helper functions
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
This file provides interfaces to read and write efuse contents.
--- .../rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.c | 1918 ++++++++++++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.h | 101 ++ 2 files changed, 2019 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.c new file +1918 -0
@@ -0,0 +1,1918 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_efuse_88xx.h" +#include "halmac_88xx_cfg.h" +#include "halmac_common_88xx.h" +#include "halmac_init_88xx.h" + +#define RSVD_EFUSE_SIZE 16 +#define RSVD_CS_EFUSE_SIZE 24 +#define PROTECT_EFUSE_SIZE 96 +#define FEATURE_DUMP_PHY_EFUSE HALMAC_FEATURE_DUMP_PHYSICAL_EFUSE +#define FEATURE_DUMP_LOG_EFUSE HALMAC_FEATURE_DUMP_LOGICAL_EFUSE + +static enum halmac_cmd_construct_state +efuse_cmd_cnstr_state_88xx (struct halmac_adapter *adapter); + +static enum halmac_ret_status +proc_dump_efuse_88xx (struct halmac_adapter *adapter, +enum halmac_efuse_read_cfg cfg); + +static enum halmac_ret_status +read_hw_efuse_88xx (struct halmac_adapter *adapter,u32 offset,u32 size, +u8 *map); + +static enum halmac_ret_status +eeprom_parser_88xx (struct halmac_adapter *adapter,u8 *phy_map,u8 *log_map); + +static enum halmac_ret_status +read_log_efuse_map_88xx (struct halmac_adapter *adapter,u8 *map); + +static enum halmac_ret_status +proc_pg_efuse_by_map_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info, +enum halmac_efuse_read_cfg cfg); + +static enum halmac_ret_status +dump_efuse_fw_88xx (struct halmac_adapter *adapter); + +static enum halmac_ret_status +dump_efuse_drv_88xx (struct halmac_adapter *adapter); + +static enum halmac_ret_status +proc_write_log_efuse_88xx (struct halmac_adapter *adapter,u32 offset,u8 value); + +static enum halmac_ret_status +update_eeprom_mask_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 *updated_mask); + +static enum halmac_ret_status +check_efuse_enough_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 *updated_mask); + +static enum halmac_ret_status +pg_extend_efuse_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 word_en, +u8 pre_word_en,u32 eeprom_offset); + +static enum halmac_ret_status +proc_pg_efuse_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 word_en, +u8 pre_word_en,u32 eeprom_offset); + +static enum halmac_ret_status +program_efuse_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 *updated_mask); + +static void +mask_eeprom_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info); + +/** +* dump_efuse_map_88xx() - dump "physical" efuse map +* @adapter : the adapter of halmac +* @cfg : dump efuse method +* Author : Ivan Lin/KaiYuan Chang +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +dump_efuse_map_88xx (struct halmac_adapter *adapter, +enum halmac_efuse_read_cfg cfg) +{ +u8 *map =NULL ; +u8 *efuse_map; +u32 efuse_size = adapter->hw_cfg_info.efuse_size; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + +if (cfg ==HALMAC_EFUSE_R_FW && +halmac_fw_validate (adapter) !=HALMAC_RET_SUCCESS ) +return HALMAC_RET_NO_DLFW ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"cfg = %d\n" , + cfg); + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Wait event(efuse)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + +if (efuse_cmd_cnstr_state_88xx (adapter) !=HALMAC_CMD_CNSTR_IDLE ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Not idle(efuse)\n" ); +return HALMAC_RET_ERROR_STATE ; + } + +if (adapter->halmac_state.mac_pwr ==HALMAC_MAC_POWER_OFF ) +pr_err ("Dump efuse in suspend\n" ); + + *proc_status =HALMAC_CMD_PROCESS_IDLE ; + adapter->evnt.phy_efuse_map =1 ; + + status =switch_efuse_bank_88xx (adapter,HALMAC_EFUSE_BANK_WIFI ); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("switch efuse bank!!\n" ); +return status; + } + + status =proc_dump_efuse_88xx (adapter, cfg); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("dump efuse!!\n" ); +return status; + } + +if (adapter->efuse_map_valid ==1 ) { + *proc_status =HALMAC_CMD_PROCESS_DONE ; + efuse_map = adapter->efuse_map; + + map =kzalloc (efuse_size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; +memset (map,0xFF , efuse_size); +mutex_lock (&adapter->efuse_mutex); +memcpy (map, efuse_map, efuse_size -PROTECT_EFUSE_SIZE ); +memcpy (map + efuse_size -PROTECT_EFUSE_SIZE + +RSVD_CS_EFUSE_SIZE , + efuse_map + efuse_size -PROTECT_EFUSE_SIZE + +RSVD_CS_EFUSE_SIZE , +PROTECT_EFUSE_SIZE -RSVD_EFUSE_SIZE - +RSVD_CS_EFUSE_SIZE ); +mutex_unlock (&adapter->efuse_mutex); + +PLTFM_EVENT_SIG (HALMAC_FEATURE_DUMP_PHYSICAL_EFUSE , + *proc_status, map, efuse_size); + adapter->evnt.phy_efuse_map =0 ; + +kfree (map); + } + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_IDLE ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* dump_efuse_map_bt_88xx() - dump "BT physical" efuse map +* @adapter : the adapter of halmac +* @bank : bt efuse bank +* @size : bt efuse map size. get from halmac_get_efuse_size API +* @map : bt efuse map +* Author : Soar / Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +dump_efuse_map_bt_88xx (struct halmac_adapter *adapter, +enum halmac_efuse_bank bank,u32 size,u8 *map) +{ +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (adapter->hw_cfg_info.bt_efuse_size != size) +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + +if (bank >=HALMAC_EFUSE_BANK_MAX || bank ==HALMAC_EFUSE_BANK_WIFI ) { +pr_err ("Undefined BT bank\n" ); +return HALMAC_RET_EFUSE_BANK_INCORRECT ; + } + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Wait event(efuse)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + +if (efuse_cmd_cnstr_state_88xx (adapter) !=HALMAC_CMD_CNSTR_IDLE ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Not idle(efuse)\n" ); +return HALMAC_RET_ERROR_STATE ; + } + + status =switch_efuse_bank_88xx (adapter, bank); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("switch efuse bank!!\n" ); +return status; + } + + status =read_hw_efuse_88xx (adapter,0 , size, map); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("read hw efuse\n" ); +return status; + } + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_IDLE ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* write_efuse_bt_88xx() - write "BT physical" efuse offset +* @adapter : the adapter of halmac +* @offset : offset +* @value : Write value +* @map : bt efuse map +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +write_efuse_bt_88xx (struct halmac_adapter *adapter,u32 offset,u8 value, +enum halmac_efuse_bank bank) +{ +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Wait event(efuse)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + +if (efuse_cmd_cnstr_state_88xx (adapter) !=HALMAC_CMD_CNSTR_IDLE ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Not idle(efuse)\n" ); +return HALMAC_RET_ERROR_STATE ; + } + +if (offset >= adapter->hw_cfg_info.efuse_size) { +pr_err ("Offset is too large\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if (bank >HALMAC_EFUSE_BANK_MAX || bank ==HALMAC_EFUSE_BANK_WIFI ) { +pr_err ("Undefined BT bank\n" ); +return HALMAC_RET_EFUSE_BANK_INCORRECT ; + } + + status =switch_efuse_bank_88xx (adapter, bank); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("switch efuse bank!!\n" ); +return status; + } + + status =write_hw_efuse_88xx (adapter, offset, value); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write efuse\n" ); +return status; + } + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_IDLE ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* read_efuse_bt_88xx() - read "BT physical" efuse offset +* @adapter : the adapter of halmac +* @offset : offset +* @value : 1 byte efuse value +* @bank : efuse bank +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +read_efuse_bt_88xx (struct halmac_adapter *adapter,u32 offset,u8 *value, +enum halmac_efuse_bank bank) +{ +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Wait event(efuse)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + +if (efuse_cmd_cnstr_state_88xx (adapter) !=HALMAC_CMD_CNSTR_IDLE ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Not idle(efuse)\n" ); +return HALMAC_RET_ERROR_STATE ; + } + +if (offset >= adapter->hw_cfg_info.efuse_size) { +pr_err ("Offset is too large\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if (bank >HALMAC_EFUSE_BANK_MAX || bank ==HALMAC_EFUSE_BANK_WIFI ) { +pr_err ("Undefined BT bank\n" ); +return HALMAC_RET_EFUSE_BANK_INCORRECT ; + } + + status =switch_efuse_bank_88xx (adapter, bank); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("switch efuse bank\n" ); +return status; + } + + status =read_efuse_88xx (adapter, offset,1 , value); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("read efuse\n" ); +return status; + } + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_IDLE ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* cfg_efuse_auto_check_88xx() - check efuse after writing it +* @adapter : the adapter of halmac +* @enable : 1, enable efuse auto check. others, disable +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +cfg_efuse_auto_check_88xx (struct halmac_adapter *adapter,u8 enable) +{ +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + adapter->efuse_auto_check_en = enable; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* get_efuse_available_size_88xx() - get efuse available size +* @adapter : the adapter of halmac +* @size : physical efuse available size +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +get_efuse_available_size_88xx (struct halmac_adapter *adapter,u32 *size) +{ +enum halmac_ret_status status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + status =dump_log_efuse_map_88xx (adapter,HALMAC_EFUSE_R_DRV ); + +if (status !=HALMAC_RET_SUCCESS ) +return status; + + *size = adapter->hw_cfg_info.efuse_size -PROTECT_EFUSE_SIZE - + adapter->efuse_end; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* get_efuse_size_88xx() - get "physical" efuse size +* @adapter : the adapter of halmac +* @size : physical efuse size +* Author : Ivan Lin/KaiYuan Chang +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +get_efuse_size_88xx (struct halmac_adapter *adapter,u32 *size) +{ +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + *size = adapter->hw_cfg_info.efuse_size; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* get_log_efuse_size_88xx() - get "logical" efuse size +* @adapter : the adapter of halmac +* @size : logical efuse size +* Author : Ivan Lin/KaiYuan Chang +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +get_log_efuse_size_88xx (struct halmac_adapter *adapter,u32 *size) +{ +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + *size = adapter->hw_cfg_info.eeprom_size; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* dump_log_efuse_map_88xx() - dump "logical" efuse map +* @adapter : the adapter of halmac +* @cfg : dump efuse method +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +dump_log_efuse_map_88xx (struct halmac_adapter *adapter, +enum halmac_efuse_read_cfg cfg) +{ +u8 *map =NULL ; +u32 size = adapter->hw_cfg_info.eeprom_size; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + +if (cfg ==HALMAC_EFUSE_R_FW && +halmac_fw_validate (adapter) !=HALMAC_RET_SUCCESS ) +return HALMAC_RET_NO_DLFW ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"cfg = %d\n" , + cfg); + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Wait event(efuse)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + +if (efuse_cmd_cnstr_state_88xx (adapter) !=HALMAC_CMD_CNSTR_IDLE ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Not idle(efuse)\n" ); +return HALMAC_RET_ERROR_STATE ; + } + +if (adapter->halmac_state.mac_pwr ==HALMAC_MAC_POWER_OFF ) +pr_err ("Dump efuse in suspend\n" ); + + *proc_status =HALMAC_CMD_PROCESS_IDLE ; + adapter->evnt.log_efuse_map =1 ; + + status =switch_efuse_bank_88xx (adapter,HALMAC_EFUSE_BANK_WIFI ); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("switch efuse bank\n" ); +return status; + } + + status =proc_dump_efuse_88xx (adapter, cfg); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("dump efuse\n" ); +return status; + } + +if (adapter->efuse_map_valid ==1 ) { + *proc_status =HALMAC_CMD_PROCESS_DONE ; + + map =kzalloc (size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; +memset (map,0xFF , size); + +if (eeprom_parser_88xx (adapter, adapter->efuse_map, map) != +HALMAC_RET_SUCCESS ) { +kfree (map); +return HALMAC_RET_EEPROM_PARSING_FAIL ; + } + +PLTFM_EVENT_SIG (HALMAC_FEATURE_DUMP_LOGICAL_EFUSE , + *proc_status, map, size); + adapter->evnt.log_efuse_map =0 ; + +kfree (map); + } + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_IDLE ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* read_logical_efuse_88xx() - read logical efuse map 1 byte +* @adapter : the adapter of halmac +* @offset : offset +* @value : 1 byte efuse value +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +read_logical_efuse_88xx (struct halmac_adapter *adapter,u32 offset,u8 *value) +{ +u8 *map =NULL ; +u32 size = adapter->hw_cfg_info.eeprom_size; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (offset >= size) { +pr_err ("Offset is too large\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Wait event(efuse)\n" ); +return HALMAC_RET_BUSY_STATE ; + } +if (efuse_cmd_cnstr_state_88xx (adapter) !=HALMAC_CMD_CNSTR_IDLE ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Not idle(efuse)\n" ); +return HALMAC_RET_ERROR_STATE ; + } + + status =switch_efuse_bank_88xx (adapter,HALMAC_EFUSE_BANK_WIFI ); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("switch efuse bank\n" ); +return status; + } + + map =kzalloc (size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; +memset (map,0xFF , size); + + status =read_log_efuse_map_88xx (adapter, map); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("read logical efuse\n" ); +kfree (map); +return status; + } + + *value = *(map + offset); + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_IDLE ) != +HALMAC_RET_SUCCESS ) { +kfree (map); +return HALMAC_RET_ERROR_STATE ; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +kfree (map); + +return HALMAC_RET_SUCCESS ; +} + +/** +* write_log_efuse_88xx() - write "logical" efuse offset +* @adapter : the adapter of halmac +* @offset : offset +* @value : value +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +write_log_efuse_88xx (struct halmac_adapter *adapter,u32 offset,u8 value) +{ +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (offset >= adapter->hw_cfg_info.eeprom_size) { +pr_err ("Offset is too large\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Wait event(efuse)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + +if (efuse_cmd_cnstr_state_88xx (adapter) !=HALMAC_CMD_CNSTR_IDLE ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Not idle(efuse)\n" ); +return HALMAC_RET_ERROR_STATE ; + } + + status =switch_efuse_bank_88xx (adapter,HALMAC_EFUSE_BANK_WIFI ); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("switch efuse bank\n" ); +return status; + } + + status =proc_write_log_efuse_88xx (adapter, offset, value); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write logical efuse\n" ); +return status; + } + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_IDLE ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* pg_efuse_by_map_88xx() - pg logical efuse by map +* @adapter : the adapter of halmac +* @info : efuse map information +* @cfg : dump efuse method +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +pg_efuse_by_map_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info, +enum halmac_efuse_read_cfg cfg) +{ +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (info->efuse_map_size != adapter->hw_cfg_info.eeprom_size) { +pr_err ("map size error\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if ((info->efuse_map_size &0xF ) >0 ) { +pr_err ("not multiple of 16\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if (info->efuse_mask_size != info->efuse_map_size >>4 ) { +pr_err ("mask size error\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if (!info->efuse_map) { +pr_err ("map is NULL\n" ); +return HALMAC_RET_NULL_POINTER ; + } + +if (!info->efuse_mask) { +pr_err ("mask is NULL\n" ); +return HALMAC_RET_NULL_POINTER ; + } + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Wait event(efuse)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + +if (efuse_cmd_cnstr_state_88xx (adapter) !=HALMAC_CMD_CNSTR_IDLE ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"Not idle(efuse)\n" ); +return HALMAC_RET_ERROR_STATE ; + } + + status =switch_efuse_bank_88xx (adapter,HALMAC_EFUSE_BANK_WIFI ); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("switch efuse bank\n" ); +return status; + } + + status =proc_pg_efuse_by_map_88xx (adapter, info, cfg); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("pg efuse\n" ); +return status; + } + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_IDLE ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* mask_log_efuse_88xx() - mask logical efuse +* @adapter : the adapter of halmac +* @info : efuse map information +* Author : Soar +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +mask_log_efuse_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info) +{ +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (info->efuse_map_size != adapter->hw_cfg_info.eeprom_size) { +pr_err ("map size error\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if ((info->efuse_map_size &0xF ) >0 ) { +pr_err ("not multiple of 16\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if (info->efuse_mask_size != info->efuse_map_size >>4 ) { +pr_err ("mask size error\n" ); +return HALMAC_RET_EFUSE_SIZE_INCORRECT ; + } + +if (!info->efuse_map) { +pr_err ("map is NULL\n" ); +return HALMAC_RET_NULL_POINTER ; + } + +if (!info->efuse_mask) { +pr_err ("mask is NULL\n" ); +return HALMAC_RET_NULL_POINTER ; + } + +mask_eeprom_88xx (adapter, info); + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_cmd_construct_state +efuse_cmd_cnstr_state_88xx (struct halmac_adapter *adapter) +{ +return adapter->halmac_state.efuse_state.cmd_cnstr_state; +} + +enum halmac_ret_status +switch_efuse_bank_88xx (struct halmac_adapter *adapter, +enum halmac_efuse_bank bank) +{ +u8 reg_value; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_BUSY ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + + reg_value =HALMAC_REG_R8 (REG_LDO_EFUSE_CTRL +1 ); + +if (bank == (reg_value & (BIT (0 ) |BIT (1 )))) +return HALMAC_RET_SUCCESS ; + + reg_value &= ~(BIT (0 ) |BIT (1 )); + reg_value |= bank; +HALMAC_REG_W8 (REG_LDO_EFUSE_CTRL +1 , reg_value); + + reg_value =HALMAC_REG_R8 (REG_LDO_EFUSE_CTRL +1 ); +if ((reg_value & (BIT (0 ) |BIT (1 ))) != bank) +return HALMAC_RET_SWITCH_EFUSE_BANK_FAIL ; + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +proc_dump_efuse_88xx (struct halmac_adapter *adapter, +enum halmac_efuse_read_cfg cfg) +{ +u32 h2c_init; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.efuse_state.proc_status; + + *proc_status =HALMAC_CMD_PROCESS_SENDING ; + +if (cnv_efuse_state_88xx (adapter,HALMAC_CMD_CNSTR_H2C_SENT ) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_ERROR_STATE ; + +if (cfg ==HALMAC_EFUSE_R_AUTO ) { + h2c_init =HALMAC_REG_R32 (REG_H2C_PKT_READADDR ); +if (adapter->halmac_state.dlfw_state ==HALMAC_DLFW_NONE || + h2c_init ==0 ) + status =dump_efuse_drv_88xx (adapter); +else + status =dump_efuse_fw_88xx (adapter); + }else if (cfg ==HALMAC_EFUSE_R_FW ) { + status =dump_efuse_fw_88xx (adapter); + }else { + status =dump_efuse_drv_88xx (adapter); + } + +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("dump efsue drv/fw\n" ); +return status; + } + +return status; +} + +enum halmac_ret_status +cnv_efuse_state_88xx (struct halmac_adapter *adapter, +enum halmac_cmd_construct_state dest_state) +{ +struct halmac_efuse_state *state = &adapter->halmac_state.efuse_state; + +if (state->cmd_cnstr_state !=HALMAC_CMD_CNSTR_IDLE && + state->cmd_cnstr_state !=HALMAC_CMD_CNSTR_BUSY && + state->cmd_cnstr_state !=HALMAC_CMD_CNSTR_H2C_SENT ) +return HALMAC_RET_ERROR_STATE ; + +if (state->cmd_cnstr_state == dest_state) +return HALMAC_RET_ERROR_STATE ; + +if (dest_state ==HALMAC_CMD_CNSTR_BUSY ) { +if (state->cmd_cnstr_state ==HALMAC_CMD_CNSTR_H2C_SENT ) +return HALMAC_RET_ERROR_STATE ; + }else if (dest_state ==HALMAC_CMD_CNSTR_H2C_SENT ) { +if (state->cmd_cnstr_state ==HALMAC_CMD_CNSTR_IDLE ) +return HALMAC_RET_ERROR_STATE ; + } + + state->cmd_cnstr_state = dest_state; + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +read_hw_efuse_88xx (struct halmac_adapter *adapter,u32 offset,u32 size, +u8 *map) +{ +u8 enable; +u32 value32; +u32 addr; +u32 tmp32; +u32 cnt; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + +/* Read efuse no need 2.5V LDO */ + enable =0 ; + status = api->halmac_set_hw_value (adapter,HALMAC_HW_LDO25_EN , &enable); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("dis ldo25\n" ); +return status; + } + value32 =HALMAC_REG_R32 (REG_EFUSE_CTRL ); + +for (addr = offset; addr < offset + size; addr++) { + value32 &= ~(BIT_MASK_EF_DATA |BITS_EF_ADDR ); + value32 |= ((addr &BIT_MASK_EF_ADDR ) <<BIT_SHIFT_EF_ADDR ); +HALMAC_REG_W32 (REG_EFUSE_CTRL , value32 & (~BIT_EF_FLAG )); + + cnt =1000000 ; +do { +udelay (1 ); + tmp32 =HALMAC_REG_R32 (REG_EFUSE_CTRL ); + cnt--; +if (cnt ==0 ) { +pr_err ("read\n" ); +return HALMAC_RET_EFUSE_R_FAIL ; + } + }while ((tmp32 &BIT_EF_FLAG ) ==0 ); + + *(map + addr - offset) = (u8)(tmp32 &BIT_MASK_EF_DATA ); + } + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +write_hw_efuse_88xx (struct halmac_adapter *adapter,u32 offset,u8 value) +{ +const u8 unlock_code =0x69 ; +u8 value_read =0 ; +u8 enable; +u32 value32; +u32 tmp32; +u32 cnt; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + +mutex_lock (&adapter->efuse_mutex); + adapter->efuse_map_valid =0 ; +mutex_unlock (&adapter->efuse_mutex); + +HALMAC_REG_W8 (REG_PMC_DBG_CTRL2 +3 , unlock_code); + +/* Enable 2.5V LDO */ + enable =1 ; + status = api->halmac_set_hw_value (adapter,HALMAC_HW_LDO25_EN , &enable); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("en ldo25\n" ); +return status; + } + + value32 =HALMAC_REG_R32 (REG_EFUSE_CTRL ); + value32 &= ~(BIT_MASK_EF_DATA |BITS_EF_ADDR ); + value32 = value32 | ((offset &BIT_MASK_EF_ADDR ) <<BIT_SHIFT_EF_ADDR ) | + (value &BIT_MASK_EF_DATA ); +HALMAC_REG_W32 (REG_EFUSE_CTRL , value32 |BIT_EF_FLAG ); + + cnt =1000000 ; +do { +udelay (1 ); + tmp32 =HALMAC_REG_R32 (REG_EFUSE_CTRL ); + cnt--; +if (cnt ==0 ) { +pr_err ("write!!\n" ); +return HALMAC_RET_EFUSE_W_FAIL ; + } + }while (BIT_EF_FLAG == (tmp32 &BIT_EF_FLAG )); + +HALMAC_REG_W8 (REG_PMC_DBG_CTRL2 +3 ,0x00 ); + +/* Disable 2.5V LDO */ + enable =0 ; + status = api->halmac_set_hw_value (adapter,HALMAC_HW_LDO25_EN , &enable); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("dis ldo25\n" ); +return status; + } + +if (adapter->efuse_auto_check_en ==1 ) { +if (read_hw_efuse_88xx (adapter, offset,1 , &value_read) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_EFUSE_R_FAIL ; +if (value_read != value) { +pr_err ("efuse compare\n" ); +return HALMAC_RET_EFUSE_W_FAIL ; + } + } + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +eeprom_parser_88xx (struct halmac_adapter *adapter,u8 *phy_map,u8 *log_map) +{ +u8 i; +u8 value8; +u8 blk_idx; +u8 word_en; +u8 valid; +u8 hdr; +u8 hdr2 =0 ; +u32 eeprom_idx; +u32 efuse_idx =0 ; +struct halmac_hw_cfg_info *hw_info = &adapter->hw_cfg_info; + +memset (log_map,0xFF , hw_info->eeprom_size); + +do { + value8 = *(phy_map + efuse_idx); + hdr = value8; + +if ((hdr &0x1f ) ==0x0f ) { + efuse_idx++; + value8 = *(phy_map + efuse_idx); + hdr2 = value8; +if (hdr2 ==0xff ) +break ; + blk_idx = ((hdr2 &0xF0 ) >>1 ) | ((hdr >>5 ) &0x07 ); + word_en = hdr2 &0x0F ; + }else { + blk_idx = (hdr &0xF0 ) >>4 ; + word_en = hdr &0x0F ; + } + +if (hdr ==0xff ) +break ; + + efuse_idx++; + +if (efuse_idx >= hw_info->efuse_size -PROTECT_EFUSE_SIZE -1 ) +return HALMAC_RET_EEPROM_PARSING_FAIL ; + +for (i =0 ; i <4 ; i++) { + valid = (u8)((~(word_en >> i)) &BIT (0 )); +if (valid ==1 ) { + eeprom_idx = (blk_idx <<3 ) + (i <<1 ); + +if ((eeprom_idx +1 ) > hw_info->eeprom_size) { +pr_err ("efuse idx:0x%X\n" , + efuse_idx -1 ); + +pr_err ("read hdr:0x%X\n" , hdr); + +pr_err ("rad hdr2:0x%X\n" , hdr2); + +return HALMAC_RET_EEPROM_PARSING_FAIL ; + } + + value8 = *(phy_map + efuse_idx); + *(log_map + eeprom_idx) = value8; + + eeprom_idx++; + efuse_idx++; + +if (efuse_idx > hw_info->efuse_size - +PROTECT_EFUSE_SIZE -1 ) +return HALMAC_RET_EEPROM_PARSING_FAIL ; + + value8 = *(phy_map + efuse_idx); + *(log_map + eeprom_idx) = value8; + + efuse_idx++; + +if (efuse_idx > hw_info->efuse_size - +PROTECT_EFUSE_SIZE ) +return HALMAC_RET_EEPROM_PARSING_FAIL ; + } + } + }while (1 ); + + adapter->efuse_end = efuse_idx; + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +read_log_efuse_map_88xx (struct halmac_adapter *adapter,u8 *map) +{ +u8 *local_map =NULL ; +u32 efuse_size; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + +if (adapter->efuse_map_valid ==0 ) { + efuse_size = adapter->hw_cfg_info.efuse_size; + + local_map =kzalloc (efuse_size,GFP_KERNEL ); +if (!local_map) +return HALMAC_RET_MALLOC_FAIL ; + + status =read_efuse_88xx (adapter,0 , efuse_size, local_map); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("read efuse\n" ); +kfree (local_map); +return status; + } + +if (!adapter->efuse_map) { + adapter->efuse_map =kzalloc (efuse_size,GFP_KERNEL ); +if (!adapter->efuse_map) { +kfree (local_map); +return HALMAC_RET_MALLOC_FAIL ; + } + } + +mutex_lock (&adapter->efuse_mutex); +memcpy (adapter->efuse_map, local_map, efuse_size); + adapter->efuse_map_valid =1 ; +mutex_unlock (&adapter->efuse_mutex); + +kfree (local_map); + } + +if (eeprom_parser_88xx (adapter, adapter->efuse_map, map) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_EEPROM_PARSING_FAIL ; + +return status; +} + +static enum halmac_ret_status +proc_pg_efuse_by_map_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info, +enum halmac_efuse_read_cfg cfg) +{ +u8 *updated_mask =NULL ; +u32 mask_size = adapter->hw_cfg_info.eeprom_size >>4 ; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + + updated_mask =kzalloc (mask_size,GFP_KERNEL ); +if (!updated_mask) +return HALMAC_RET_MALLOC_FAIL ; +memset (updated_mask,0x00 , mask_size); + + status =update_eeprom_mask_88xx (adapter, info, updated_mask); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("update eeprom mask\n" ); +kfree (updated_mask); +return status; + } + + status =check_efuse_enough_88xx (adapter, info, updated_mask); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("chk efuse enough\n" ); +kfree (updated_mask); +return status; + } + + status =program_efuse_88xx (adapter, info, updated_mask); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("pg efuse\n" ); +kfree (updated_mask); +return status; + } + +kfree (updated_mask); + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +dump_efuse_drv_88xx (struct halmac_adapter *adapter) +{ +u8 *map =NULL ; +u32 efuse_size = adapter->hw_cfg_info.efuse_size; + +if (!adapter->efuse_map) { + adapter->efuse_map =kzalloc (efuse_size,GFP_KERNEL ); +if (!adapter->efuse_map) { +reset_ofld_feature_88xx (adapter, +FEATURE_DUMP_PHY_EFUSE ); +return HALMAC_RET_MALLOC_FAIL ; + } + } + +if (adapter->efuse_map_valid ==0 ) { + map =kzalloc (efuse_size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; + +if (read_hw_efuse_88xx (adapter,0 , efuse_size, map) != +HALMAC_RET_SUCCESS ) { +kfree (map); +return HALMAC_RET_EFUSE_R_FAIL ; + } + +mutex_lock (&adapter->efuse_mutex); +memcpy (adapter->efuse_map, map, efuse_size); + adapter->efuse_map_valid =1 ; +mutex_unlock (&adapter->efuse_mutex); + +kfree (map); + } + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +dump_efuse_fw_88xx (struct halmac_adapter *adapter) +{ +u8 h2c_buf[H2C_PKT_SIZE_88XX ] = {0 }; +u16 seq_num =0 ; +u32 efuse_size = adapter->hw_cfg_info.efuse_size; +struct halmac_h2c_header_info hdr_info; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + + hdr_info.sub_cmd_id =SUB_CMD_ID_DUMP_PHYSICAL_EFUSE ; + hdr_info.content_size =0 ; + hdr_info.ack =1 ; +set_h2c_pkt_hdr_88xx (adapter, h2c_buf, &hdr_info, &seq_num); + + adapter->halmac_state.efuse_state.seq_num = seq_num; + +if (!adapter->efuse_map) { + adapter->efuse_map =kzalloc (efuse_size,GFP_KERNEL ); +if (!adapter->efuse_map) { +reset_ofld_feature_88xx (adapter, +FEATURE_DUMP_PHY_EFUSE ); +return HALMAC_RET_MALLOC_FAIL ; + } + } + +if (adapter->efuse_map_valid ==0 ) { + status =send_h2c_pkt_88xx (adapter, h2c_buf); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("send h2c pkt\n" ); +reset_ofld_feature_88xx (adapter, +FEATURE_DUMP_PHY_EFUSE ); +return status; + } + } + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +proc_write_log_efuse_88xx (struct halmac_adapter *adapter,u32 offset,u8 value) +{ +u8 byte1; +u8 byte2; +u8 blk; +u8 blk_idx; +u8 hdr; +u8 hdr2; +u8 *map =NULL ; +u32 eeprom_size = adapter->hw_cfg_info.eeprom_size; +u32 end; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + + map =kzalloc (eeprom_size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; +memset (map,0xFF , eeprom_size); + + status =read_log_efuse_map_88xx (adapter, map); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("read logical efuse\n" ); +kfree (map); +return status; + } + +if (*(map + offset) != value) { + end = adapter->efuse_end; + blk = (u8)(offset >>3 ); + blk_idx = (u8)((offset & (8 -1 )) >>1 ); + +if (offset >0x7f ) { + hdr = (((blk &0x07 ) <<5 ) &0xE0 ) |0x0F ; + hdr2 = (u8)(((blk &0x78 ) <<1 ) + + ((0x1 << blk_idx) ^0x0F )); + }else { + hdr = (u8)((blk <<4 ) + ((0x01 << blk_idx) ^0x0F )); + } + +if ((offset &1 ) ==0 ) { + byte1 = value; + byte2 = *(map + offset +1 ); + }else { + byte1 = *(map + offset -1 ); + byte2 = value; + } + +if (offset >0x7f ) { +if (adapter->hw_cfg_info.efuse_size <= +4 +PROTECT_EFUSE_SIZE + end) { +kfree (map); +return HALMAC_RET_EFUSE_NOT_ENOUGH ; + } + + status =write_hw_efuse_88xx (adapter, end, hdr); +if (status !=HALMAC_RET_SUCCESS ) { +kfree (map); +return status; + } + + status =write_hw_efuse_88xx (adapter, end +1 , hdr2); +if (status !=HALMAC_RET_SUCCESS ) { +kfree (map); +return status; + } + + status =write_hw_efuse_88xx (adapter, end +2 , byte1); +if (status !=HALMAC_RET_SUCCESS ) { +kfree (map); +return status; + } + + status =write_hw_efuse_88xx (adapter, end +3 , byte2); +if (status !=HALMAC_RET_SUCCESS ) { +kfree (map); +return status; + } + }else { +if (adapter->hw_cfg_info.efuse_size <= +3 +PROTECT_EFUSE_SIZE + end) { +kfree (map); +return HALMAC_RET_EFUSE_NOT_ENOUGH ; + } + + status =write_hw_efuse_88xx (adapter, end, hdr); +if (status !=HALMAC_RET_SUCCESS ) { +kfree (map); +return status; + } + + status =write_hw_efuse_88xx (adapter, end +1 , byte1); +if (status !=HALMAC_RET_SUCCESS ) { +kfree (map); +return status; + } + + status =write_hw_efuse_88xx (adapter, end +2 , byte2); +if (status !=HALMAC_RET_SUCCESS ) { +kfree (map); +return status; + } + } + } + +kfree (map); + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +read_efuse_88xx (struct halmac_adapter *adapter,u32 offset,u32 size,u8 *map) +{ +if (!map) { +pr_err ("malloc map\n" ); +return HALMAC_RET_NULL_POINTER ; + } + +if (adapter->efuse_map_valid ==1 ) { +memcpy (map, adapter->efuse_map + offset, size); + }else { +if (read_hw_efuse_88xx (adapter, offset, size, map) != +HALMAC_RET_SUCCESS ) +return HALMAC_RET_EFUSE_R_FAIL ; + } + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +update_eeprom_mask_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 *updated_mask) +{ +u8 *map =NULL ; +u8 clr_bit =0 ; +u32 eeprom_size = adapter->hw_cfg_info.eeprom_size; +u8 *map_pg; +u8 *efuse_mask; +u16 i; +u16 j; +u16 map_offset; +u16 mask_offset; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + + map =kzalloc (eeprom_size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; +memset (map,0xFF , eeprom_size); + +memset (updated_mask,0x00 , info->efuse_mask_size); + + status =read_log_efuse_map_88xx (adapter, map); + +if (status !=HALMAC_RET_SUCCESS ) { +kfree (map); +return status; + } + + map_pg = info->efuse_map; + efuse_mask = info->efuse_mask; + +for (i =0 ; i < info->efuse_mask_size; i++) + *(updated_mask + i) = *(efuse_mask + i); + +for (i =0 ; i < info->efuse_map_size; i +=16 ) { +for (j =0 ; j <16 ; j +=2 ) { + map_offset = i + j; + mask_offset = i >>4 ; +if (*(u16 *)(map_pg + map_offset) == + *(u16 *)(map + map_offset)) { +switch (j) { +case 0 : + clr_bit =BIT (4 ); +break ; +case 2 : + clr_bit =BIT (5 ); +break ; +case 4 : + clr_bit =BIT (6 ); +break ; +case 6 : + clr_bit =BIT (7 ); +break ; +case 8 : + clr_bit =BIT (0 ); +break ; +case 10 : + clr_bit =BIT (1 ); +break ; +case 12 : + clr_bit =BIT (2 ); +break ; +case 14 : + clr_bit =BIT (3 ); +break ; +default : +break ; + } + *(updated_mask + mask_offset) &= ~clr_bit; + } + } + } + +kfree (map); + +return status; +} + +static enum halmac_ret_status +check_efuse_enough_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 *updated_mask) +{ +u8 pre_word_en; +u16 i; +u16 j; +u32 eeprom_offset; +u32 pg_num =0 ; + +for (i =0 ; i < info->efuse_map_size; i = i +8 ) { + eeprom_offset = i; + +if ((eeprom_offset &7 ) >0 ) + pre_word_en = (*(updated_mask + (i >>4 )) &0x0F ); +else + pre_word_en = (*(updated_mask + (i >>4 )) >>4 ); + +if (pre_word_en >0 ) { +if (eeprom_offset >0x7f ) { + pg_num +=2 ; +for (j =0 ; j <4 ; j++) { +if (((pre_word_en >> j) &0x1 ) >0 ) + pg_num +=2 ; + } + }else { + pg_num++; +for (j =0 ; j <4 ; j++) { +if (((pre_word_en >> j) &0x1 ) >0 ) + pg_num +=2 ; + } + } + } + } + +if (adapter->hw_cfg_info.efuse_size <= + (pg_num +PROTECT_EFUSE_SIZE + adapter->efuse_end)) +return HALMAC_RET_EFUSE_NOT_ENOUGH ; + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +pg_extend_efuse_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 word_en, +u8 pre_word_en,u32 eeprom_offset) +{ +u8 blk; +u8 hdr; +u8 hdr2; +u16 i; +u32 efuse_end; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + + efuse_end = adapter->efuse_end; + + blk = (u8)(eeprom_offset >>3 ); + hdr = (((blk &0x07 ) <<5 ) &0xE0 ) |0x0F ; + hdr2 = (u8)(((blk &0x78 ) <<1 ) + word_en); + + status =write_hw_efuse_88xx (adapter, efuse_end, hdr); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write efuse\n" ); +return status; + } + + status =write_hw_efuse_88xx (adapter, efuse_end +1 , hdr2); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write efuse(+1)\n" ); +return status; + } + + efuse_end = efuse_end +2 ; +for (i =0 ; i <4 ; i++) { +if (((pre_word_en >> i) &0x1 ) >0 ) { + status =write_hw_efuse_88xx (adapter, efuse_end, + *(info->efuse_map + + eeprom_offset + + (i <<1 ))); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write efuse(<<1)\n" ); +return status; + } + + status =write_hw_efuse_88xx (adapter, efuse_end +1 , + *(info->efuse_map + + eeprom_offset + (i <<1 ) + +1 )); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write efuse(<<1)+1\n" ); +return status; + } + efuse_end = efuse_end +2 ; + } + } + adapter->efuse_end = efuse_end; +return status; +} + +static enum halmac_ret_status +proc_pg_efuse_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 word_en, +u8 pre_word_en,u32 eeprom_offset) +{ +u8 blk; +u8 hdr; +u16 i; +u32 efuse_end; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + + efuse_end = adapter->efuse_end; + + blk = (u8)(eeprom_offset >>3 ); + hdr = (u8)((blk <<4 ) + word_en); + + status =write_hw_efuse_88xx (adapter, efuse_end, hdr); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write efuse\n" ); +return status; + } + efuse_end = efuse_end +1 ; +for (i =0 ; i <4 ; i++) { +if (((pre_word_en >> i) &0x1 ) >0 ) { + status =write_hw_efuse_88xx (adapter, efuse_end, + *(info->efuse_map + + eeprom_offset + + (i <<1 ))); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write efuse(<<1)\n" ); +return status; + } + status =write_hw_efuse_88xx (adapter, efuse_end +1 , + *(info->efuse_map + + eeprom_offset + (i <<1 ) + +1 )); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("write efuse(<<1)+1\n" ); +return status; + } + efuse_end = efuse_end +2 ; + } + } + adapter->efuse_end = efuse_end; +return status; +} + +static enum halmac_ret_status +program_efuse_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info,u8 *updated_mask) +{ +u8 pre_word_en; +u8 word_en; +u16 i; +u32 eeprom_offset; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + +for (i =0 ; i < info->efuse_map_size; i = i +8 ) { + eeprom_offset = i; + +if (((eeprom_offset >>3 ) &1 ) >0 ) { + pre_word_en = (*(updated_mask + (i >>4 )) &0x0F ); + word_en = pre_word_en ^0x0F ; + }else { + pre_word_en = (*(updated_mask + (i >>4 )) >>4 ); + word_en = pre_word_en ^0x0F ; + } + +if (pre_word_en >0 ) { +if (eeprom_offset >0x7f ) { + status =pg_extend_efuse_88xx (adapter, info, + word_en, + pre_word_en, + eeprom_offset); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("extend efuse\n" ); +return status; + } + }else { + status =proc_pg_efuse_88xx (adapter, info, + word_en, + pre_word_en, + eeprom_offset); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("extend efuse" ); +return status; + } + } + } + } + +return status; +} + +static void +mask_eeprom_88xx (struct halmac_adapter *adapter, +struct halmac_pg_efuse_info *info) +{ +u8 pre_word_en; +u8 *updated_mask; +u8 *efuse_map; +u16 i; +u16 j; +u32 offset; + + updated_mask = info->efuse_mask; + efuse_map = info->efuse_map; + +for (i =0 ; i < info->efuse_map_size; i = i +8 ) { + offset = i; + +if (((offset >>3 ) &1 ) >0 ) + pre_word_en = (*(updated_mask + (i >>4 )) &0x0F ); +else + pre_word_en = (*(updated_mask + (i >>4 )) >>4 ); + +for (j =0 ; j <4 ; j++) { +if (((pre_word_en >> j) &0x1 ) ==0 ) { + *(efuse_map + offset + (j <<1 )) =0xFF ; + *(efuse_map + offset + (j <<1 ) +1 ) =0xFF ; + } + } + } +} + +enum halmac_ret_status +get_efuse_data_88xx (struct halmac_adapter *adapter,u8 *buf,u32 size) +{ +u8 seg_id; +u8 seg_size; +u8 seq_num; +u8 fw_rc; +u8 *map =NULL ; +u32 eeprom_size = adapter->hw_cfg_info.eeprom_size; +struct halmac_efuse_state *state = &adapter->halmac_state.efuse_state; +enum halmac_cmd_process_status proc_status; + + seq_num = (u8 )EFUSE_DATA_GET_H2C_SEQ (buf); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"Seq num : h2c->%d c2h->%d\n" , state->seq_num, seq_num); +if (seq_num != state->seq_num) { +pr_err ("Seq num mismatch : h2c->%d c2h->%d\n" , state->seq_num, + seq_num); +return HALMAC_RET_SUCCESS ; + } + +if (state->proc_status !=HALMAC_CMD_PROCESS_SENDING ) { +pr_err ("not cmd sending\n" ); +return HALMAC_RET_SUCCESS ; + } + + seg_id = (u8 )EFUSE_DATA_GET_SEGMENT_ID (buf); + seg_size = (u8 )EFUSE_DATA_GET_SEGMENT_SIZE (buf); +if (seg_id ==0 ) + adapter->efuse_seg_size = seg_size; + + map =kzalloc (eeprom_size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; +memset (map,0xFF , eeprom_size); + +mutex_lock (&adapter->efuse_mutex); +memcpy (adapter->efuse_map + seg_id * adapter->efuse_seg_size, + buf +C2H_DATA_OFFSET_88XX , seg_size); +mutex_unlock (&adapter->efuse_mutex); + +if (EFUSE_DATA_GET_END_SEGMENT (buf) ==0 ) { +kfree (map); +return HALMAC_RET_SUCCESS ; + } + + fw_rc = state->fw_rc; + +if ((enum halmac_h2c_return_code )fw_rc ==HALMAC_H2C_RETURN_SUCCESS ) { + proc_status =HALMAC_CMD_PROCESS_DONE ; + state->proc_status = proc_status; + +mutex_lock (&adapter->efuse_mutex); + adapter->efuse_map_valid =1 ; +mutex_unlock (&adapter->efuse_mutex); + +if (adapter->evnt.phy_efuse_map ==1 ) { +PLTFM_EVENT_SIG (FEATURE_DUMP_PHY_EFUSE , + proc_status, adapter->efuse_map, + adapter->hw_cfg_info.efuse_size); + adapter->evnt.phy_efuse_map =0 ; + } + +if (adapter->evnt.log_efuse_map ==1 ) { +if (eeprom_parser_88xx (adapter, adapter->efuse_map, + map) !=HALMAC_RET_SUCCESS ) { +kfree (map); +return HALMAC_RET_EEPROM_PARSING_FAIL ; + } +PLTFM_EVENT_SIG (FEATURE_DUMP_LOG_EFUSE , proc_status, + map, eeprom_size); + adapter->evnt.log_efuse_map =0 ; + } + }else { + proc_status =HALMAC_CMD_PROCESS_ERROR ; + state->proc_status = proc_status; + +if (adapter->evnt.phy_efuse_map ==1 ) { +PLTFM_EVENT_SIG (FEATURE_DUMP_PHY_EFUSE , proc_status, + &state->fw_rc,1 ); + adapter->evnt.phy_efuse_map =0 ; + } + +if (adapter->evnt.log_efuse_map ==1 ) { +PLTFM_EVENT_SIG (FEATURE_DUMP_LOG_EFUSE , proc_status, + &state->fw_rc,1 ); + adapter->evnt.log_efuse_map =0 ; + } + } + +kfree (map); + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_dump_phy_efuse_status_88xx (struct halmac_adapter *adapter, +enum halmac_cmd_process_status *proc_status, +u8 *data,u32 *size) +{ +u8 *map =NULL ; +u32 efuse_size = adapter->hw_cfg_info.efuse_size; +struct halmac_efuse_state *state = &adapter->halmac_state.efuse_state; + + *proc_status = state->proc_status; + +if (!data) +return HALMAC_RET_NULL_POINTER ; + +if (!size) +return HALMAC_RET_NULL_POINTER ; + +if (*proc_status ==HALMAC_CMD_PROCESS_DONE ) { +if (*size < efuse_size) { + *size = efuse_size; +return HALMAC_RET_BUFFER_TOO_SMALL ; + } + + *size = efuse_size; + + map =kzalloc (efuse_size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; +memset (map,0xFF , efuse_size); +mutex_lock (&adapter->efuse_mutex); +memcpy (map, adapter->efuse_map, + efuse_size -PROTECT_EFUSE_SIZE ); +memcpy (map + efuse_size -PROTECT_EFUSE_SIZE + +RSVD_CS_EFUSE_SIZE , + adapter->efuse_map + efuse_size -PROTECT_EFUSE_SIZE + +RSVD_CS_EFUSE_SIZE , +PROTECT_EFUSE_SIZE -RSVD_EFUSE_SIZE - +RSVD_CS_EFUSE_SIZE ); +mutex_unlock (&adapter->efuse_mutex); + +memcpy (data, map, *size); + +kfree (map); + } + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_dump_log_efuse_status_88xx (struct halmac_adapter *adapter, +enum halmac_cmd_process_status *proc_status, +u8 *data,u32 *size) +{ +u8 *map =NULL ; +u32 eeprom_size = adapter->hw_cfg_info.eeprom_size; +struct halmac_efuse_state *state = &adapter->halmac_state.efuse_state; + + *proc_status = state->proc_status; + +if (!data) +return HALMAC_RET_NULL_POINTER ; + +if (!size) +return HALMAC_RET_NULL_POINTER ; + +if (*proc_status ==HALMAC_CMD_PROCESS_DONE ) { +if (*size < eeprom_size) { + *size = eeprom_size; +return HALMAC_RET_BUFFER_TOO_SMALL ; + } + + *size = eeprom_size; + + map =kzalloc (eeprom_size,GFP_KERNEL ); +if (!map) +return HALMAC_RET_MALLOC_FAIL ; +memset (map,0xFF , eeprom_size); + +if (eeprom_parser_88xx (adapter, adapter->efuse_map, map) != +HALMAC_RET_SUCCESS ) { +kfree (map); +return HALMAC_RET_EEPROM_PARSING_FAIL ; + } + +memcpy (data, map, *size); + +kfree (map); + } + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_h2c_ack_phy_efuse_88xx (struct halmac_adapter *adapter,u8 *buf,u32 size) +{ +u8 seq_num =0 ; +u8 fw_rc; +struct halmac_efuse_state *state = &adapter->halmac_state.efuse_state; + + seq_num = (u8 )H2C_ACK_HDR_GET_H2C_SEQ (buf); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"Seq num : h2c->%d c2h->%d\n" , state->seq_num, seq_num); +if (seq_num != state->seq_num) { +pr_err ("Seq num mismatch : h2c->%d c2h->%d\n" , state->seq_num, + seq_num); +return HALMAC_RET_SUCCESS ; + } + +if (state->proc_status !=HALMAC_CMD_PROCESS_SENDING ) { +pr_err ("not cmd sending\n" ); +return HALMAC_RET_SUCCESS ; + } + + fw_rc = (u8 )H2C_ACK_HDR_GET_H2C_RETURN_CODE (buf); + state->fw_rc = fw_rc; + +return HALMAC_RET_SUCCESS ; +} + +u32 +get_rsvd_efuse_size_88xx (struct halmac_adapter *adapter) +{ +return PROTECT_EFUSE_SIZE ; +}
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_efuse_88xx.h new file +101 -0
101 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 13/19 rtlwifi: halmac: add files to implement halmac ops
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
The structure halmac_ops defined in wifi.h, and this commit implements and hooks ops to the structure, so a symbol rtl_halmac_get_ops_pointer is expoerted to access this module. Meanwhile, we implement ops defined and needed by this module.
--- .../wireless/realtek/rtlwifi/halmac/rtl_halmac.c | 1403 ++++++++++++++++++++ .../wireless/realtek/rtlwifi/halmac/rtl_halmac.h | 77 ++ 2 files changed, 1480 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/rtl_halmac.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/rtl_halmac.h
drivers/net/wireless/realtek/rtlwifi/halmac/rtl_halmac.c new file +1403 -0
@@ -0,0 +1,1403 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_api.h" +#include "rtl_halmac.h" +#include <linux/module.h> +#include <linux/vmalloc.h> + +#define rtlpriv_to_halmac (priv) \ + ((struct halmac_adapter *)((priv)->halmac.internal)) + +#define DEFAULT_INDICATOR_TIMELMT msecs_to_jiffies(1000)/* ms */ + +const struct rtl_halmac_ops rtl_halmac_operation = { + .halmac_init_adapter = rtl_halmac_init_adapter, + .halmac_deinit_adapter = rtl_halmac_deinit_adapter, + .halmac_init_hal = rtl_halmac_init_hal, + .halmac_deinit_hal = rtl_halmac_deinit_hal, + .halmac_poweron = rtl_halmac_poweron, + .halmac_poweroff = rtl_halmac_poweroff, + + .halmac_phy_power_switch = rtl_halmac_phy_power_switch, + .halmac_set_mac_address = rtl_halmac_set_mac_address, + .halmac_set_bssid = rtl_halmac_set_bssid, + + .halmac_get_physical_efuse_size = rtl_halmac_get_physical_efuse_size, + .halmac_read_physical_efuse_map = rtl_halmac_read_physical_efuse_map, + .halmac_get_logical_efuse_size = rtl_halmac_get_logical_efuse_size, + .halmac_read_logical_efuse_map = rtl_halmac_read_logical_efuse_map, + + .halmac_set_bandwidth = rtl_halmac_set_bandwidth, + + .halmac_c2h_handle = rtl_halmac_c2h_handle, + + .halmac_chk_txdesc = rtl_halmac_chk_txdesc, + .halmac_iqk = rtl_halmac_iqk, +}; +EXPORT_SYMBOL (rtl_halmac_operation); + +enum pltfm_ret_status { +FLTFM_RET_FAIL =0 , +FLTFM_RET_SUCCESS =1 , +}; + +static u8 _halmac_reg_read_8 (void *p,u32 offset) +{ +struct rtl_priv *rtlpriv = (struct rtl_priv *)p; + +return rtl_read_byte (rtlpriv, offset); +} + +static u16 _halmac_reg_read_16 (void *p,u32 offset) +{ +struct rtl_priv *rtlpriv = (struct rtl_priv *)p; + +return rtl_read_word (rtlpriv, offset); +} + +static u32 _halmac_reg_read_32 (void *p,u32 offset) +{ +struct rtl_priv *rtlpriv = (struct rtl_priv *)p; + +return rtl_read_dword (rtlpriv, offset); +} + +static void _halmac_reg_write_8 (void *p,u32 offset,u8 val) +{ +struct rtl_priv *rtlpriv = (struct rtl_priv *)p; + +rtl_write_byte (rtlpriv, offset, val); +} + +static void _halmac_reg_write_16 (void *p,u32 offset,u16 val) +{ +struct rtl_priv *rtlpriv = (struct rtl_priv *)p; + +rtl_write_word (rtlpriv, offset, val); +} + +static void _halmac_reg_write_32 (void *p,u32 offset,u32 val) +{ +struct rtl_priv *rtlpriv = (struct rtl_priv *)p; + +rtl_write_dword (rtlpriv, offset, val); +} + +static u8 _halmac_write_data_rsvd_page (void *p,u8 *buf,u32 size) +{ +struct rtl_priv *rtlpriv = (struct rtl_priv *)p; + +if (rtlpriv->cfg->ops->halmac_cb_write_data_rsvd_page && + rtlpriv->cfg->ops->halmac_cb_write_data_rsvd_page (rtlpriv, buf, + size)) +return FLTFM_RET_SUCCESS ; + +return FLTFM_RET_FAIL ; +} + +static u8 _halmac_write_data_h2c (void *p,u8 *buf,u32 size) +{ +struct rtl_priv *rtlpriv = (struct rtl_priv *)p; + +if (rtlpriv->cfg->ops->halmac_cb_write_data_h2c && + rtlpriv->cfg->ops->halmac_cb_write_data_h2c (rtlpriv, buf, size)) +return FLTFM_RET_SUCCESS ; + +return FLTFM_RET_FAIL ; +} + +static const char *const RTL_HALMAC_FEATURE_NAME [] = { +"HALMAC_FEATURE_CFG_PARA" , +"HALMAC_FEATURE_DUMP_PHYSICAL_EFUSE" , +"HALMAC_FEATURE_DUMP_LOGICAL_EFUSE" , +"HALMAC_FEATURE_UPDATE_PACKET" , +"HALMAC_FEATURE_UPDATE_DATAPACK" , +"HALMAC_FEATURE_RUN_DATAPACK" , +"HALMAC_FEATURE_CHANNEL_SWITCH" , +"HALMAC_FEATURE_IQK" , +"HALMAC_FEATURE_POWER_TRACKING" , +"HALMAC_FEATURE_PSD" , +"HALMAC_FEATURE_ALL" }; + +static inline bool is_valid_id_status (struct rtl_priv *rtlpriv, +enum halmac_feature_id id, +enum halmac_cmd_process_status status) +{ +switch (id) { +case HALMAC_FEATURE_CFG_PARA : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +case HALMAC_FEATURE_DUMP_PHYSICAL_EFUSE : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +if (status !=HALMAC_CMD_PROCESS_DONE ) { +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s: <WARN> id(%d) unspecified status(%d)!\n" , + __func__, id, status); + } +break ; +case HALMAC_FEATURE_DUMP_LOGICAL_EFUSE : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +if (status !=HALMAC_CMD_PROCESS_DONE ) { +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s: <WARN> id(%d) unspecified status(%d)!\n" , + __func__, id, status); + } +break ; +case HALMAC_FEATURE_UPDATE_PACKET : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +case HALMAC_FEATURE_UPDATE_DATAPACK : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +case HALMAC_FEATURE_RUN_DATAPACK : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +case HALMAC_FEATURE_CHANNEL_SWITCH : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +case HALMAC_FEATURE_IQK : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +case HALMAC_FEATURE_POWER_TRACKING : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +case HALMAC_FEATURE_PSD : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +case HALMAC_FEATURE_ALL : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: %s\n" , __func__, +RTL_HALMAC_FEATURE_NAME [id]); +break ; +default : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s: unknown feature id(%d)\n" , __func__, id); +return false; + } + +return true; +} + +static int init_halmac_event_with_waittime (struct rtl_priv *rtlpriv, +enum halmac_feature_id id,u8 *buf, +u32 size,u32 time) +{ +struct rtl_halmac_indicator *indicator = &rtlpriv->halmac.indicator[id]; +struct completion *comp = indicator->comp; + +if (!comp) { + comp =kzalloc (sizeof (*comp),GFP_KERNEL ); +if (!comp) +return -ENOMEM ; + }else { +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s: <WARN> id(%d) sctx is not NULL!!\n" , __func__, + id); + indicator->comp =NULL ; + } + +init_completion (comp); + indicator->wait_ms = time; + indicator->buffer = buf; + indicator->buf_size = size; + indicator->ret_size =0 ; + indicator->status =0 ; + +/* fill sctx at least to sure other variables are all ready! */ + indicator->comp = comp; + +return 0 ; +} + +static inline int init_halmac_event (struct rtl_priv *rtlpriv, +enum halmac_feature_id id,u8 *buf, +u32 size) +{ +return init_halmac_event_with_waittime (rtlpriv, id, buf, size, +DEFAULT_INDICATOR_TIMELMT ); +} + +static void free_halmac_event (struct rtl_priv *rtlpriv, +enum halmac_feature_id id) +{ +struct rtl_halmac_indicator *indicator = &rtlpriv->halmac.indicator[id]; +struct completion *comp = indicator->comp; + +if (!comp) +return ; + + indicator->comp =NULL ; +kfree (comp); +} + +static int wait_halmac_event (struct rtl_priv *rtlpriv, +enum halmac_feature_id id) +{ +struct rtl_halmac_indicator *indicator; +int ret; + + indicator = &rtlpriv->halmac.indicator[id]; + +if (!indicator->comp) +return -EINVAL ; + + ret =wait_for_completion_timeout (indicator->comp, indicator->wait_ms); + +free_halmac_event (rtlpriv, id); +if (ret >0 ) +return 0 ; + +return -ETIME ; +} + +static u8 +_halmac_event_indication (void *p,enum halmac_feature_id feature_id, +enum halmac_cmd_process_status process_status,u8 *buf, +u32 size) +{ +struct rtl_priv *rtlpriv; +struct rtl_halmac_indicator *tbl, *indicator; +struct completion *comp; +u32 cpsz; + + rtlpriv = (struct rtl_priv *)p; + tbl = rtlpriv->halmac.indicator; + +if (!is_valid_id_status (rtlpriv, feature_id, process_status)) +return FLTFM_RET_FAIL ; + + indicator = &tbl[feature_id]; + indicator->status = process_status; + indicator->ret_size = size; +if (!indicator->comp) { +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s: No feature id(%d) waiting!!\n" , __func__, + feature_id); +return FLTFM_RET_FAIL ; + } + comp = indicator->comp; + +if (process_status ==HALMAC_CMD_PROCESS_ERROR ) { +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s: Something wrong id(%d)!!\n" , __func__, + feature_id); +complete (comp);/* may provide error code */ +return FLTFM_RET_SUCCESS ; + } + +if (size > indicator->buf_size) { +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s: <WARN> id(%d) buffer is not enough(%d<%d), data will be truncated!\n" , + __func__, feature_id, indicator->buf_size, size); + cpsz = indicator->buf_size; + }else { + cpsz = size; + } + +if (cpsz && indicator->buffer) +memcpy (indicator->buffer, buf, cpsz); + +complete (comp); + +return FLTFM_RET_SUCCESS ; +} + +static struct halmac_platform_api rtl_halmac_platform_api = { +/* R/W register */ + .REG_READ_8 = _halmac_reg_read_8, + .REG_READ_16 = _halmac_reg_read_16, + .REG_READ_32 = _halmac_reg_read_32, + .REG_WRITE_8 = _halmac_reg_write_8, + .REG_WRITE_16 = _halmac_reg_write_16, + .REG_WRITE_32 = _halmac_reg_write_32, + +/* impletement in HAL-IC level */ + .SEND_RSVD_PAGE = _halmac_write_data_rsvd_page, + .SEND_H2C_PKT = _halmac_write_data_h2c, + .EVENT_INDICATION = _halmac_event_indication, +}; + +static int init_priv (struct rtl_halmac *halmac) +{ +struct rtl_halmac_indicator *indicator; +u32 count, size; + + count =HALMAC_FEATURE_ALL +1 ; + size =sizeof (*indicator) * count; + indicator =kzalloc (size,GFP_KERNEL ); +if (!indicator) +return -EINVAL ; + halmac->indicator = indicator; + +return 0 ; +} + +static void deinit_priv (struct rtl_halmac *halmac) +{ +struct rtl_halmac_indicator *indicator; + + indicator = halmac->indicator; + halmac->indicator =NULL ; +kfree (indicator); +} + +int rtl_halmac_init_adapter (struct rtl_priv *rtlpriv) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +enum halmac_interface intf; +enum halmac_ret_status status; +int err =0 ; +struct halmac_platform_api *pf_api = &rtl_halmac_platform_api; + + halmac =rtlpriv_to_halmac (rtlpriv); +if (halmac) { + err =0 ; + goto out; + } + + err =init_priv (&rtlpriv->halmac); +if (err) + goto out; + + intf =HALMAC_INTERFACE_PCIE ; + status =halmac_init_adapter (rtlpriv, pf_api, intf, &halmac, &api); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("%s: halmac_init_adapter fail!(status=%d)\n" , + __func__, status); + err = -EINVAL ; + goto out; + } + + rtlpriv->halmac.internal = halmac; + + status = api->halmac_interface_integration_tuning (halmac); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("%s: halmac_interface_integration_tuning fail!(status=%d)\n" , + __func__, status); + err = -EINVAL ; + goto out; + } + + status = api->halmac_phy_cfg (halmac,HALMAC_INTF_PHY_PLATFORM_ALL ); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("%s: halmac_phy_cfg fail!(status=%d)\n" , + __func__, status); + err = -EINVAL ; + goto out; + } + +out: +if (err) +rtl_halmac_deinit_adapter (rtlpriv); + +return err; +} + +int rtl_halmac_deinit_adapter (struct rtl_priv *rtlpriv) +{ +struct halmac_adapter *halmac; +enum halmac_ret_status status; +int err =0 ; + + halmac =rtlpriv_to_halmac (rtlpriv); +if (!halmac) { + err =0 ; + goto out; + } + +deinit_priv (&rtlpriv->halmac); + +halmac_halt_api (halmac); + + status =halmac_deinit_adapter (halmac); + rtlpriv->halmac.internal =NULL ; +if (status !=HALMAC_RET_SUCCESS ) { + err = -EINVAL ; + goto out; + } + +out: +return err; +} + +int rtl_halmac_poweron (struct rtl_priv *rtlpriv) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +enum halmac_ret_status status; +int err = -EINVAL ; + + halmac =rtlpriv_to_halmac (rtlpriv); +if (!halmac) + goto out; + + api =HALMAC_GET_API (halmac); + + status = api->halmac_pre_init_system_cfg (halmac); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + status = api->halmac_mac_power_switch (halmac,HALMAC_MAC_POWER_ON ); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + status = api->halmac_init_system_cfg (halmac); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =0 ; +out: +return err; +} + +int rtl_halmac_poweroff (struct rtl_priv *rtlpriv) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +enum halmac_ret_status status; +int err = -EINVAL ; + + halmac =rtlpriv_to_halmac (rtlpriv); +if (!halmac) + goto out; + + api =HALMAC_GET_API (halmac); + + status = api->halmac_mac_power_switch (halmac,HALMAC_MAC_POWER_OFF ); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =0 ; +out: +return err; +} + +int rtl_halmac_config_rx_info (struct rtl_priv *rtlpriv, +enum halmac_drv_info info) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +enum halmac_ret_status status; +int err = -EINVAL ; + + halmac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (halmac); + + status = api->halmac_cfg_drv_info (halmac, info); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =0 ; +out: +return err; +} + +static enum halmac_ret_status init_mac_flow (struct rtl_priv *rtlpriv) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +enum halmac_ret_status status; +enum halmac_trx_mode trx_mode; +enum halmac_wireless_mode mode; +u8 wifi_test =0 ; +int err; + + halmac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (halmac); + +if (wifi_test) + trx_mode =HALMAC_TRX_MODE_WMM ; +else + trx_mode =HALMAC_TRX_MODE_NORMAL ; + + status = api->halmac_init_mac_cfg (halmac, trx_mode); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =rtl_halmac_rx_agg_switch (rtlpriv, true); +if (err) + goto out; + +if (rtlpriv->cfg->maps[RTL_RC_VHT_RATE_1SS_MCS7 ]) + mode =HALMAC_WIRELESS_MODE_AC ; +else if (rtlpriv->cfg->maps[RTL_RC_HT_RATEMCS7 ]) + mode =HALMAC_WIRELESS_MODE_N ; +else if (rtlpriv->cfg->maps[RTL_RC_OFDM_RATE6M ]) + mode =HALMAC_WIRELESS_MODE_G ; +else + mode =HALMAC_WIRELESS_MODE_B ; + + status = api->halmac_cfg_operation_mode (halmac, mode); + +if (status !=HALMAC_RET_SUCCESS ) + goto out; + +out: +return status; +} + +static inline enum halmac_rf_type _rf_type_drv2halmac (enum rf_type rf_drv) +{ +enum halmac_rf_type rf_mac; + +switch (rf_drv) { +case RF_1T2R : + rf_mac =HALMAC_RF_1T2R ; +break ; +case RF_2T2R : + rf_mac =HALMAC_RF_2T2R ; +break ; +case RF_1T1R : + rf_mac =HALMAC_RF_1T1R ; +break ; +case RF_2T2R_GREEN : + rf_mac =HALMAC_RF_2T2R_GREEN ; +break ; +default : + rf_mac =HALMAC_RF_1T1R ; +break ; + } + +return rf_mac; +} + +static enum bb_path _rf_type_to_ant_path (enum rf_type rf) +{ +enum bb_path path; + +switch (rf) { +case RF_1T1R : +case RF_1T2R : + path =BB_PATH_A ; +break ; +case RF_2T2R : +case RF_2T3R : +case RF_2T4R : + path =BB_PATH_AB ; +break ; +case RF_3T3R : +case RF_3T4R : + path =BB_PATH_ABC ; +break ; +case RF_4T4R : +default : + path =BB_PATH_ABCD ; +break ; + } + +return path; +} + +static int _send_general_info (struct rtl_priv *rtlpriv) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +struct halmac_general_info info; +enum halmac_ret_status status; +enum bb_path path =BB_PATH_A ; + + halmac =rtlpriv_to_halmac (rtlpriv); +if (!halmac) +return -EINVAL ; + api =HALMAC_GET_API (halmac); + +memset (&info,0 ,sizeof (info)); + info.rfe_type = rtlpriv->rtlhal.rfe_type; + info.rf_type =_rf_type_drv2halmac (rtlpriv->phy.rf_type); + path =_rf_type_to_ant_path (rtlpriv->phy.rf_type); + info.tx_ant_status = (u8 )path; + info.rx_ant_status = (u8 )path; + + status = api->halmac_send_general_info (halmac, &info); +switch (status) { +case HALMAC_RET_SUCCESS : +break ; +case HALMAC_RET_NO_DLFW : +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_WARNING , +"%s: halmac_send_general_info() fail because fw not dl!\n" , + __func__); +/* fall through */ +default : +return -EINVAL ; + } + +return 0 ; +} + +static int _halmac_init_hal (struct rtl_priv *rtlpriv,u8 *fw,u32 fwsize) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +enum halmac_ret_status status; +bool ok; +bool fw_ok = false; +int err, err_ret = -EINVAL ; + + halmac =rtlpriv_to_halmac (rtlpriv); +if (!halmac) + goto out; + api =HALMAC_GET_API (halmac); + +/* StatePowerOff */ + err =rtl_halmac_poweron (rtlpriv); +if (err) + goto out; + +/* StatePowerOn */ + +/* DownloadFW */ +if (fw && fwsize) { + err =rtl_halmac_dlfw (rtlpriv, fw, fwsize,0 ); +if (err) + goto out; + fw_ok = true; + } + +/* InitMACFlow */ + status =init_mac_flow (rtlpriv); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + +/* halmac_send_general_info */ +if (fw_ok) { + err =_send_general_info (rtlpriv); +if (err) + goto out; + } + +/* Init Phy parameter-MAC */ +if (rtlpriv->cfg->ops->halmac_cb_init_mac_register) + ok = rtlpriv->cfg->ops->halmac_cb_init_mac_register (rtlpriv); +else + ok = false; + +if (!ok) + goto out; + +/* StateMacInitialized */ + +/* halmac_cfg_drv_info */ + err =rtl_halmac_config_rx_info (rtlpriv,HALMAC_DRV_INFO_PHY_STATUS ); +if (err) + goto out; + +/* Init BB, RF */ +if (rtlpriv->cfg->ops->halmac_cb_init_bb_rf_register) + ok = rtlpriv->cfg->ops->halmac_cb_init_bb_rf_register (rtlpriv); +else + ok = false; + +if (!ok) + goto out; + + status = api->halmac_init_interface_cfg (halmac); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + +/* StateRxIdle */ + + err_ret =0 ; +out: +return err_ret; +} + +int rtl_halmac_init_hal (struct rtl_priv *rtlpriv) +{ +if (!rtlpriv->rtlhal.pfirmware || rtlpriv->rtlhal.fwsize ==0 ) +return -EINVAL ; + +return _halmac_init_hal (rtlpriv, rtlpriv->rtlhal.pfirmware, + rtlpriv->rtlhal.fwsize); +} + +int rtl_halmac_deinit_hal (struct rtl_priv *rtlpriv) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +enum halmac_ret_status status; +int err = -EINVAL ; + + halmac =rtlpriv_to_halmac (rtlpriv); +if (!halmac) + goto out; + api =HALMAC_GET_API (halmac); + + status = api->halmac_deinit_interface_cfg (halmac); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + status = api->halmac_mac_power_switch (halmac,HALMAC_MAC_POWER_OFF ); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =0 ; +out: +return err; +} + +int rtl_halmac_self_verify (struct rtl_priv *rtlpriv) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +int err = -EINVAL ; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + status = api->halmac_verify_platform_api (mac); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + status = api->halmac_h2c_lb (mac); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =0 ; +out: +return err; +} + +int rtl_halmac_dlfw (struct rtl_priv *rtlpriv,u8 *fw,u32 fwsize,bool redl) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +struct halmac_fw_version fw_version; +int err =0 ; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + +if (!fw || fwsize ==0 ) +return -EINVAL ; + +/* 1. Driver Stop Tx */ +/* ToDo */ + +/* 2. Driver Check Tx FIFO is empty */ +/* ToDo */ + +/* 3. Config MAX download size */ + api->halmac_cfg_max_dl_size (mac,0x1000 ); + +/* 4. Download Firmware */ + status = api->halmac_download_firmware (mac, fw, fwsize); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + + status = api->halmac_get_fw_version (mac, &fw_version); +if (status ==HALMAC_RET_SUCCESS ) { + rtlpriv->rtlhal.fw_version = fw_version.version; + rtlpriv->rtlhal.fw_subversion = + (fw_version.sub_version <<8 ) | (fw_version.sub_index); + +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_DMESG , +"halmac report firmware version %04X.%04X\n" , + rtlpriv->rtlhal.fw_version, + rtlpriv->rtlhal.fw_subversion); + } + +if (redl) + err =_send_general_info (rtlpriv); + +/* 5. Driver resume TX if needed */ +/* ToDo */ + +/* 6. Reset driver variables if needed */ + +return err; +} + +int rtl_halmac_phy_power_switch (struct rtl_priv *rtlpriv,u8 enable) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +enum halmac_ret_status status; + + halmac =rtlpriv_to_halmac (rtlpriv); +if (!halmac) +return -EINVAL ; + api =HALMAC_GET_API (halmac); + + status = api->halmac_set_hw_value (halmac,HALMAC_HW_EN_BB_RF , &enable); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + +return 0 ; +} + +static bool _is_fw_read_cmd_down (struct rtl_priv *rtlpriv,u8 msgbox_num) +{ +bool read_down = false; +int retry_cnts =100 ; +u8 valid; + +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s, reg_1cc(%x), msg_box(%d)...\n" , __func__, +rtl_read_byte (rtlpriv,REG_HMETFR ), msgbox_num); + +do { + valid =rtl_read_byte (rtlpriv,REG_HMETFR ) &BIT (msgbox_num); +if (valid ==0 ) + read_down = true; +else +schedule (); + }while ((!read_down) && (retry_cnts--)); + +return read_down; +} + +/* for H2C cmd */ +#define MAX_H2C_BOX_NUMS 4 +#define MESSAGE_BOX_SIZE 4 +#define EX_MESSAGE_BOX_SIZE 4 + +int rtl_halmac_send_h2c (struct rtl_priv *rtlpriv,u8 *h2c) +{ +u8 h2c_box_num =0 ; +u32 msgbox_addr =0 ; +u32 msgbox_ex_addr =0 ; +__le32 h2c_cmd =0 ; +__le32 h2c_cmd_ex =0 ; +s32 ret = -EINVAL ; +unsigned long flag =0 ; +struct rtl_hal *rtlhal =rtl_hal (rtlpriv); + +if (!h2c) { +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD ,"%s: pbuf is NULL\n" , + __func__); +return ret; + } + +spin_lock_irqsave (&rtlpriv->locks.h2c_lock, flag); + +/* pay attention to if race condition happened in H2C cmd setting */ + h2c_box_num = rtlhal->last_hmeboxnum; + +if (!_is_fw_read_cmd_down (rtlpriv, h2c_box_num)) { +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +" fw read cmd failed...\n" ); + goto exit; + } + +/* Write Ext command(byte 4 -7) */ + msgbox_ex_addr =REG_HMEBOX_E0 + (h2c_box_num *EX_MESSAGE_BOX_SIZE ); +memcpy ((u8 *)(&h2c_cmd_ex), h2c +4 ,EX_MESSAGE_BOX_SIZE ); +rtl_write_dword (rtlpriv, msgbox_ex_addr,le32_to_cpu (h2c_cmd_ex)); + +/* Write command (byte 0 -3 ) */ + msgbox_addr =REG_HMEBOX0 + (h2c_box_num *MESSAGE_BOX_SIZE ); +memcpy ((u8 *)(&h2c_cmd), h2c,4 ); +rtl_write_dword (rtlpriv, msgbox_addr,le32_to_cpu (h2c_cmd)); + +/* update last msg box number */ + rtlhal->last_hmeboxnum = (h2c_box_num +1 ) %MAX_H2C_BOX_NUMS ; + ret =0 ; + +exit: +spin_unlock_irqrestore (&rtlpriv->locks.h2c_lock, flag); +return ret; +} + +int rtl_halmac_c2h_handle (struct rtl_priv *rtlpriv,u8 *c2h,u32 size) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + status = api->halmac_get_c2h_info (mac, c2h, size); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + +return 0 ; +} + +int rtl_halmac_get_physical_efuse_size (struct rtl_priv *rtlpriv,u32 *size) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +u32 val; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + status = api->halmac_get_efuse_size (mac, &val); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + + *size = val; +return 0 ; +} + +int rtl_halmac_read_physical_efuse_map (struct rtl_priv *rtlpriv,u8 *map, +u32 size) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +enum halmac_feature_id id; +int ret; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + id =HALMAC_FEATURE_DUMP_PHYSICAL_EFUSE ; + + ret =init_halmac_event (rtlpriv, id, map, size); +if (ret) +return -EINVAL ; + + status = api->halmac_dump_efuse_map (mac,HALMAC_EFUSE_R_DRV ); +if (status !=HALMAC_RET_SUCCESS ) { +free_halmac_event (rtlpriv, id); +return -EINVAL ; + } + + ret =wait_halmac_event (rtlpriv, id); +if (ret) +return -EINVAL ; + +return 0 ; +} + +int rtl_halmac_read_physical_efuse (struct rtl_priv *rtlpriv,u32 offset, +u32 cnt,u8 *data) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +u8 v; +u32 i; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + +for (i =0 ; i < cnt; i++) { + status = api->halmac_read_efuse (mac, offset + i, &v); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + data[i] = v; + } + +return 0 ; +} + +int rtl_halmac_write_physical_efuse (struct rtl_priv *rtlpriv,u32 offset, +u32 cnt,u8 *data) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +u32 i; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + +for (i =0 ; i < cnt; i++) { + status = api->halmac_write_efuse (mac, offset + i, data[i]); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + } + +return 0 ; +} + +int rtl_halmac_get_logical_efuse_size (struct rtl_priv *rtlpriv,u32 *size) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +u32 val; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + status = api->halmac_get_logical_efuse_size (mac, &val); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + + *size = val; +return 0 ; +} + +int rtl_halmac_read_logical_efuse_map (struct rtl_priv *rtlpriv,u8 *map, +u32 size) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +enum halmac_feature_id id; +int ret; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + id =HALMAC_FEATURE_DUMP_LOGICAL_EFUSE ; + + ret =init_halmac_event (rtlpriv, id, map, size); +if (ret) +return -EINVAL ; + + status = api->halmac_dump_logical_efuse_map (mac,HALMAC_EFUSE_R_AUTO ); +if (status !=HALMAC_RET_SUCCESS ) { +free_halmac_event (rtlpriv, id); +return -EINVAL ; + } + + ret =wait_halmac_event (rtlpriv, id); +if (ret) +return -EINVAL ; + +return 0 ; +} + +int rtl_halmac_write_logical_efuse_map (struct rtl_priv *rtlpriv,u8 *map, +u32 size,u8 *maskmap,u32 masksize) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +struct halmac_pg_efuse_info pginfo; +enum halmac_ret_status status; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + pginfo.efuse_map = map; + pginfo.efuse_map_size = size; + pginfo.efuse_mask = maskmap; + pginfo.efuse_mask_size = masksize; + + status = api->halmac_pg_efuse_by_map (mac, &pginfo,HALMAC_EFUSE_R_AUTO ); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + +return 0 ; +} + +int rtl_halmac_read_logical_efuse (struct rtl_priv *rtlpriv,u32 offset,u32 cnt, +u8 *data) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +u8 v; +u32 i; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + +for (i =0 ; i < cnt; i++) { + status = api->halmac_read_logical_efuse (mac, offset + i, &v); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + data[i] = v; + } + +return 0 ; +} + +int rtl_halmac_write_logical_efuse (struct rtl_priv *rtlpriv,u32 offset, +u32 cnt,u8 *data) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +u32 i; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + +for (i =0 ; i < cnt; i++) { + status = api->halmac_write_logical_efuse (mac, offset + i, + data[i]); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + } + +return 0 ; +} + +int rtl_halmac_set_mac_address (struct rtl_priv *rtlpriv,u8 hwport,u8 *addr) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +u8 port; +union halmac_wlan_addr hwa; +enum halmac_ret_status status; +int err = -EINVAL ; + + halmac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (halmac); + + port = hwport; +memset (&hwa,0 ,sizeof (hwa)); +ether_addr_copy (hwa.addr, addr); + + status = api->halmac_cfg_mac_addr (halmac, port, &hwa); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =0 ; +out: +return err; +} + +int rtl_halmac_set_bssid (struct rtl_priv *rtlpriv,u8 hwport,u8 *addr) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +u8 port; +union halmac_wlan_addr hwa; +enum halmac_ret_status status; +int err = -EINVAL ; + + halmac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (halmac); + port = hwport; + +memset (&hwa,0 ,sizeof (hwa)); +ether_addr_copy (hwa.addr, addr); + status = api->halmac_cfg_bssid (halmac, port, &hwa); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =0 ; +out: +return err; +} + +int rtl_halmac_set_bandwidth (struct rtl_priv *rtlpriv,u8 channel, +u8 pri_ch_idx,u8 bw) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + status = api->halmac_cfg_ch_bw (mac, channel, pri_ch_idx, bw); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + +return 0 ; +} + +int rtl_halmac_get_hw_value (struct rtl_priv *rtlpriv,enum halmac_hw_id hw_id, +void *pvalue) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + status = api->halmac_get_hw_value (mac, hw_id, pvalue); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + +return 0 ; +} + +int rtl_halmac_dump_fifo (struct rtl_priv *rtlpriv, +enum hal_fifo_sel halmac_fifo_sel) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +u8 *pfifo_map =NULL ; +u32 fifo_size =0 ; +s8 ret =0 ; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + fifo_size = api->halmac_get_fifo_size (mac, halmac_fifo_sel); +if (fifo_size) + pfifo_map =vmalloc (fifo_size); +if (!pfifo_map) +return -EINVAL ; + + status = api->halmac_dump_fifo (mac, halmac_fifo_sel,0 , fifo_size, + pfifo_map); + +if (status !=HALMAC_RET_SUCCESS ) { + ret = -EINVAL ; + goto _exit; + } + +_exit: +if (pfifo_map) +vfree (pfifo_map); +return ret; +} + +int rtl_halmac_rx_agg_switch (struct rtl_priv *rtlpriv,bool enable) +{ +struct halmac_adapter *halmac; +struct halmac_api *api; +struct halmac_rxagg_cfg rxaggcfg; +enum halmac_ret_status status; +int err = -EINVAL ; + + halmac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (halmac); +memset ((void *)&rxaggcfg,0 ,sizeof (rxaggcfg)); + +if (enable) { +/* enable RX agg. */ +/* PCIE do nothing */ + }else { +/* disable RX agg. */ + rxaggcfg.mode =HALMAC_RX_AGG_MODE_NONE ; + } + + status = api->halmac_cfg_rx_aggregation (halmac, &rxaggcfg); +if (status !=HALMAC_RET_SUCCESS ) + goto out; + + err =0 ; +out: +return err; +} + +int rtl_halmac_get_wow_reason (struct rtl_priv *rtlpriv,u8 *reason) +{ +u8 val8; +int err = -EINVAL ; + + val8 =rtl_read_byte (rtlpriv,0x1C7 ); +if (val8 ==0xEA ) + goto out; + + *reason = val8; + err =0 ; +out: +return err; +} + +int rtl_halmac_get_drv_info_sz (struct rtl_priv *rtlpriv,u8 *sz) +{ +u8 dw =6 ;/* max number */ + + *sz = dw *8 ; +return 0 ; +} + +int rtl_halmac_get_rsvd_drv_pg_bndy (struct rtl_priv *rtlpriv,u16 *drv_pg) +{ +enum halmac_ret_status status; +struct halmac_adapter *halmac =rtlpriv_to_halmac (rtlpriv); +struct halmac_api *api =HALMAC_GET_API (halmac); + + status = api->halmac_get_hw_value (halmac,HALMAC_HW_RSVD_PG_BNDY , + drv_pg); +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + +return 0 ; +} + +int rtl_halmac_chk_txdesc (struct rtl_priv *rtlpriv,u8 *txdesc,u32 size) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + + status = api->halmac_chk_txdesc (mac, txdesc, size); + +if (status !=HALMAC_RET_SUCCESS ) +return -EINVAL ; + +return 0 ; +} + +int rtl_halmac_iqk (struct rtl_priv *rtlpriv,u8 clear,u8 segment) +{ +struct halmac_adapter *mac; +struct halmac_api *api; +enum halmac_ret_status status; +enum halmac_feature_id id; +struct halmac_iqk_para para; +int ret; +u8 retry =3 ; +u8 delay =1 ;/* ms */ +unsigned long us; + + mac =rtlpriv_to_halmac (rtlpriv); + api =HALMAC_GET_API (mac); + id =HALMAC_FEATURE_IQK ; + + ret =init_halmac_event (rtlpriv, id,NULL ,0 ); +if (ret) +return -EINVAL ; + + para.clear = clear; + para.segment_iqk = segment; + +do { + status = api->halmac_start_iqk (mac, ¶); +if (status !=HALMAC_RET_BUSY_STATE ) +break ; +RT_TRACE (rtlpriv,COMP_HALMAC ,DBG_LOUD , +"%s: Fail to start IQK, status is BUSY! retry=%d\n" , + __func__, retry); + +if (!retry) +break ; + retry--; + +if (delay <20 ) { + us = delay *1000UL ; +usleep_range (us, us +1000UL ); + }else { +msleep (delay); + } + + }while (1 ); + +if (status !=HALMAC_RET_SUCCESS ) { +free_halmac_event (rtlpriv, id); +return -EINVAL ; + } + + ret =wait_halmac_event (rtlpriv, id); +if (ret) +return -EINVAL ; + +return 0 ; +} + +MODULE_AUTHOR ("Ping-Ke Shih <[email protected]>" ); +MODULE_LICENSE ("GPL" ); +MODULE_DESCRIPTION ("Realtek 802.11n PCI wireless module hamlac" );
drivers/net/wireless/realtek/rtlwifi/halmac/rtl_halmac.h new file +77 -0
77 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 14/19 rtlwifi: halmac: add halmac init/deinit functions
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Add files to initialize and free halmac context. Since halmac is an three levels hierarchy file structure, so the added files provide interfaces of halmac, 88xx and 8822b.
--- .../halmac_88xx/halmac_8822b/halmac_init_8822b.c | 688 +++++++++++++ .../halmac_88xx/halmac_8822b/halmac_init_8822b.h | 33 + .../rtlwifi/halmac/halmac_88xx/halmac_init_88xx.c | 1071 ++++++++++++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_init_88xx.h | 70 ++ .../wireless/realtek/rtlwifi/halmac/halmac_api.c | 438 ++++++++ .../wireless/realtek/rtlwifi/halmac/halmac_api.h | 65 ++ 6 files changed, 2365 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_init_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_init_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_init_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_init_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_api.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_api.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_init_8822b.c new file +688 -0
@@ -0,0 +1,688 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_init_8822b.h" +#include "halmac_8822b_cfg.h" +#include "halmac_pcie_8822b.h" +#include "halmac_sdio_8822b.h" +#include "halmac_usb_8822b.h" +#include "halmac_gpio_8822b.h" +#include "halmac_common_8822b.h" +#include "halmac_cfg_wmac_8822b.h" +#include "../halmac_common_88xx.h" +#include "../halmac_init_88xx.h" + +#define RSVD_PG_DRV_NUM 16 +#define RSVD_PG_H2C_EXTRAINFO_NUM 24 +#define RSVD_PG_H2C_STATICINFO_NUM 8 +#define RSVD_PG_H2CQ_NUM 8 +#define RSVD_PG_CPU_INSTRUCTION_NUM 0 +#define RSVD_PG_FW_TXBUF_NUM 4 +#define RSVD_PG_CSIBUF_NUM 0 +#define RSVD_PG_DLLB_NUM (TX_FIFO_SIZE_8822B / 3 >> \ + TX_PAGE_SIZE_SHIFT_88XX) + +#define MAC_TRX_ENABLE (BIT_HCI_TXDMA_EN | BIT_HCI_RXDMA_EN | BIT_TXDMA_EN | \ + BIT_RXDMA_EN | BIT_PROTOCOL_EN | BIT_SCHEDULE_EN | \ + BIT_MACTXEN | BIT_MACRXEN) + +#define BLK_DESC_NUM 0x3 + +#define WLAN_AMPDU_MAX_TIME 0x70 +#define WLAN_RTS_LEN_TH 0xFF +#define WLAN_RTS_TX_TIME_TH 0x08 +#define WLAN_MAX_AGG_PKT_LIMIT 0x20 +#define WLAN_RTS_MAX_AGG_PKT_LIMIT 0x20 +#define WALN_FAST_EDCA_VO_TH 0x06 +#define WLAN_FAST_EDCA_VI_TH 0x06 +#define WLAN_FAST_EDCA_BE_TH 0x06 +#define WLAN_FAST_EDCA_BK_TH 0x06 +#define WLAN_BAR_RETRY_LIMIT 0x01 +#define WLAN_RA_TRY_RATE_AGG_LIMIT 0x08 + +/*SDIO RQPN Mapping*/ +static struct halmac_rqpn HALMAC_RQPN_SDIO_8822B [] = { +/* { mode, vo_map, vi_map, be_map, bk_map, mg_map, hi_map } */ + {HALMAC_TRX_MODE_NORMAL , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_TRXSHARE , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_WMM , +HALMAC_MAP2_HQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_P2P , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_LOOPBACK , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, +}; + +/*PCIE RQPN Mapping*/ +static struct halmac_rqpn HALMAC_RQPN_PCIE_8822B [] = { +/* { mode, vo_map, vi_map, be_map, bk_map, mg_map, hi_map } */ + {HALMAC_TRX_MODE_NORMAL , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_TRXSHARE , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_WMM , +HALMAC_MAP2_HQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_P2P , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_LOOPBACK , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, +}; + +/*USB 2 Bulkout RQPN Mapping*/ +static struct halmac_rqpn HALMAC_RQPN_2BULKOUT_8822B [] = { +/* { mode, vo_map, vi_map, be_map, bk_map, mg_map, hi_map } */ + {HALMAC_TRX_MODE_NORMAL , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_HQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_TRXSHARE , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_HQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_WMM , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_HQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_P2P , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_LOOPBACK , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, +}; + +/*USB 3 Bulkout RQPN Mapping*/ +static struct halmac_rqpn HALMAC_RQPN_3BULKOUT_8822B [] = { +/* { mode, vo_map, vi_map, be_map, bk_map, mg_map, hi_map } */ + {HALMAC_TRX_MODE_NORMAL , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_TRXSHARE , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_WMM , +HALMAC_MAP2_HQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_P2P , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_LOOPBACK , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_HQ ,HALMAC_MAP2_HQ }, +}; + +/*USB 4 Bulkout RQPN Mapping*/ +static struct halmac_rqpn HALMAC_RQPN_4BULKOUT_8822B [] = { +/* { mode, vo_map, vi_map, be_map, bk_map, mg_map, hi_map } */ + {HALMAC_TRX_MODE_NORMAL , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_TRXSHARE , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_WMM , +HALMAC_MAP2_HQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_NQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_P2P , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_LOOPBACK , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK , +HALMAC_MAP2_NQ ,HALMAC_MAP2_NQ ,HALMAC_MAP2_LQ ,HALMAC_MAP2_LQ , +HALMAC_MAP2_EXQ ,HALMAC_MAP2_HQ }, +}; + +/*SDIO Page Number*/ +static struct halmac_pg_num HALMAC_PG_NUM_SDIO_8822B [] = { +/* { mode, hq_num, nq_num, lq_num, exq_num, gap_num} */ + {HALMAC_TRX_MODE_NORMAL ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_TRXSHARE ,32 ,32 ,32 ,32 ,1 }, + {HALMAC_TRX_MODE_WMM ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_P2P ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_LOOPBACK ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK ,64 ,64 ,64 ,64 ,1 }, +}; + +/*PCIE Page Number*/ +static struct halmac_pg_num HALMAC_PG_NUM_PCIE_8822B [] = { +/* { mode, hq_num, nq_num, lq_num, exq_num, gap_num} */ + {HALMAC_TRX_MODE_NORMAL ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_TRXSHARE ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_WMM ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_P2P ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_LOOPBACK ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK ,64 ,64 ,64 ,64 ,1 }, +}; + +/*USB 2 Bulkout Page Number*/ +static struct halmac_pg_num HALMAC_PG_NUM_2BULKOUT_8822B [] = { +/* { mode, hq_num, nq_num, lq_num, exq_num, gap_num} */ + {HALMAC_TRX_MODE_NORMAL ,64 ,64 ,0 ,0 ,1 }, + {HALMAC_TRX_MODE_TRXSHARE ,64 ,64 ,0 ,0 ,1 }, + {HALMAC_TRX_MODE_WMM ,64 ,64 ,0 ,0 ,1 }, + {HALMAC_TRX_MODE_P2P ,64 ,64 ,0 ,0 ,1 }, + {HALMAC_TRX_MODE_LOOPBACK ,64 ,64 ,0 ,0 ,1 }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK ,64 ,64 ,0 ,0 ,1 }, +}; + +/*USB 3 Bulkout Page Number*/ +static struct halmac_pg_num HALMAC_PG_NUM_3BULKOUT_8822B [] = { +/* { mode, hq_num, nq_num, lq_num, exq_num, gap_num} */ + {HALMAC_TRX_MODE_NORMAL ,64 ,64 ,64 ,0 ,1 }, + {HALMAC_TRX_MODE_TRXSHARE ,64 ,64 ,64 ,0 ,1 }, + {HALMAC_TRX_MODE_WMM ,64 ,64 ,64 ,0 ,1 }, + {HALMAC_TRX_MODE_P2P ,64 ,64 ,64 ,0 ,1 }, + {HALMAC_TRX_MODE_LOOPBACK ,64 ,64 ,64 ,0 ,1 }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK ,64 ,64 ,64 ,0 ,1 }, +}; + +/*USB 4 Bulkout Page Number*/ +static struct halmac_pg_num HALMAC_PG_NUM_4BULKOUT_8822B [] = { +/* { mode, hq_num, nq_num, lq_num, exq_num, gap_num} */ + {HALMAC_TRX_MODE_NORMAL ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_TRXSHARE ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_WMM ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_P2P ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_LOOPBACK ,64 ,64 ,64 ,64 ,1 }, + {HALMAC_TRX_MODE_DELAY_LOOPBACK ,64 ,64 ,64 ,64 ,1 }, +}; + +static enum halmac_ret_status +txdma_queue_mapping_8822b (struct halmac_adapter *adapter, +enum halmac_trx_mode mode); + +static enum halmac_ret_status +priority_queue_cfg_8822b (struct halmac_adapter *adapter, +enum halmac_trx_mode mode); + +static enum halmac_ret_status +set_trx_fifo_info_8822b (struct halmac_adapter *adapter, +enum halmac_trx_mode mode); +enum halmac_ret_status +mount_api_8822b (struct halmac_adapter *adapter) +{ +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + + adapter->chip_id =HALMAC_CHIP_ID_8822B ; + adapter->hw_cfg_info.efuse_size =EFUSE_SIZE_8822B ; + adapter->hw_cfg_info.eeprom_size =EEPROM_SIZE_8822B ; + adapter->hw_cfg_info.bt_efuse_size =BT_EFUSE_SIZE_8822B ; + adapter->hw_cfg_info.cam_entry_num =SEC_CAM_NUM_8822B ; + adapter->hw_cfg_info.tx_fifo_size =TX_FIFO_SIZE_8822B ; + adapter->hw_cfg_info.rx_fifo_size =RX_FIFO_SIZE_8822B ; + adapter->hw_cfg_info.ac_oqt_size =OQT_ENTRY_AC_8822B ; + adapter->hw_cfg_info.non_ac_oqt_size =OQT_ENTRY_NOAC_8822B ; + adapter->hw_cfg_info.usb_txagg_num =BLK_DESC_NUM ; + adapter->txff_alloc.rsvd_drv_pg_num =RSVD_PG_DRV_NUM ; + + api->halmac_init_trx_cfg = init_trx_cfg_8822b; + api->halmac_init_protocol_cfg = init_protocol_cfg_8822b; + api->halmac_init_h2c = init_h2c_8822b; + api->halmac_pinmux_get_func = pinmux_get_func_8822b; + api->halmac_pinmux_set_func = pinmux_set_func_8822b; + api->halmac_pinmux_free_func = pinmux_free_func_8822b; + api->halmac_get_hw_value = get_hw_value_8822b; + api->halmac_set_hw_value = set_hw_value_8822b; + api->halmac_cfg_drv_info = cfg_drv_info_8822b; + api->halmac_fill_txdesc_checksum = fill_txdesc_check_sum_8822b; + api->halmac_init_low_pwr = init_low_pwr_8822b; + +if (adapter->intf ==HALMAC_INTERFACE_SDIO ) { + api->halmac_mac_power_switch = mac_pwr_switch_sdio_8822b; + api->halmac_phy_cfg = phy_cfg_sdio_8822b; + api->halmac_pcie_switch = pcie_switch_sdio_8822b; + api->halmac_interface_integration_tuning = intf_tun_sdio_8822b; + api->halmac_tx_allowed_sdio = tx_allowed_sdio_8822b; + api->halmac_get_sdio_tx_addr = get_sdio_tx_addr_8822b; + api->halmac_reg_read_8 = reg_r8_sdio_8822b; + api->halmac_reg_write_8 = reg_w8_sdio_8822b; + api->halmac_reg_read_16 = reg_r16_sdio_8822b; + api->halmac_reg_write_16 = reg_w16_sdio_8822b; + api->halmac_reg_read_32 = reg_r32_sdio_8822b; + api->halmac_reg_write_32 = reg_w32_sdio_8822b; + + adapter->sdio_fs.macid_map_size =MACID_MAX_8822B *2 ; +if (!adapter->sdio_fs.macid_map) { + adapter->sdio_fs.macid_map = +kzalloc (adapter->sdio_fs.macid_map_size,GFP_KERNEL ); +if (!adapter->sdio_fs.macid_map) +pr_err ("allocate macid_map!!\n" ); + } + }else if (adapter->intf ==HALMAC_INTERFACE_USB ) { + api->halmac_mac_power_switch = mac_pwr_switch_usb_8822b; + api->halmac_phy_cfg = phy_cfg_usb_8822b; + api->halmac_pcie_switch = pcie_switch_usb_8822b; + api->halmac_interface_integration_tuning = intf_tun_usb_8822b; + }else if (adapter->intf ==HALMAC_INTERFACE_PCIE ) { + api->halmac_mac_power_switch = mac_pwr_switch_pcie_8822b; + api->halmac_phy_cfg = phy_cfg_pcie_8822b; + api->halmac_pcie_switch = pcie_switch_8822b; + api->halmac_interface_integration_tuning = intf_tun_pcie_8822b; + }else { +pr_err ("Undefined IC\n" ); +return HALMAC_RET_CHIP_NOT_SUPPORT ; + } + +return HALMAC_RET_SUCCESS ; +} + +/** +* init_trx_cfg_8822b() - config trx dma register +* @adapter : the adapter of halmac +* @mode : trx mode selection +* Author : KaiYuan Chang/Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +init_trx_cfg_8822b (struct halmac_adapter *adapter,enum halmac_trx_mode mode) +{ +u8 value8; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + + adapter->trx_mode = mode; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + status =txdma_queue_mapping_8822b (adapter, mode); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("queue mapping\n" ); +return status; + } + + value8 =0 ; +HALMAC_REG_W8 (REG_CR , value8); + value8 =MAC_TRX_ENABLE ; +HALMAC_REG_W8 (REG_CR , value8); +HALMAC_REG_W32 (REG_H2CQ_CSR ,BIT (31 )); + + status =priority_queue_cfg_8822b (adapter, mode); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("halmac_txdma_queue_mapping fail!\n" ); +return status; + } + +if (adapter->txff_alloc.rx_fifo_exp_mode != +HALMAC_RX_FIFO_EXPANDING_MODE_DISABLE ) +HALMAC_REG_W8 (REG_RX_DRVINFO_SZ ,RX_DESC_DUMMY_SIZE_8822B >>3 ); + + status =init_h2c_8822b (adapter); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("init h2cq!\n" ); +return status; + } + +if (adapter->intf ==HALMAC_INTERFACE_USB ) +HALMAC_REG_W8_SET (REG_TXDMA_PQ_MAP ,BIT (0 )); + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +txdma_queue_mapping_8822b (struct halmac_adapter *adapter, +enum halmac_trx_mode mode) +{ +u16 value16; +struct halmac_rqpn *cur_rqpn_sel =NULL ; +enum halmac_ret_status status; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + +if (adapter->intf ==HALMAC_INTERFACE_SDIO ) { + cur_rqpn_sel =HALMAC_RQPN_SDIO_8822B ; + }else if (adapter->intf ==HALMAC_INTERFACE_PCIE ) { + cur_rqpn_sel =HALMAC_RQPN_PCIE_8822B ; + }else if (adapter->intf ==HALMAC_INTERFACE_USB ) { +if (adapter->bulkout_num ==2 ) { + cur_rqpn_sel =HALMAC_RQPN_2BULKOUT_8822B ; + }else if (adapter->bulkout_num ==3 ) { + cur_rqpn_sel =HALMAC_RQPN_3BULKOUT_8822B ; + }else if (adapter->bulkout_num ==4 ) { + cur_rqpn_sel =HALMAC_RQPN_4BULKOUT_8822B ; + }else { +pr_err ("invalid intf\n" ); +return HALMAC_RET_NOT_SUPPORT ; + } + }else { +return HALMAC_RET_NOT_SUPPORT ; + } + + status =rqpn_parser_88xx (adapter, mode, cur_rqpn_sel); +if (status !=HALMAC_RET_SUCCESS ) +return status; + + value16 =0 ; + value16 |=BIT_TXDMA_HIQ_MAP (adapter->pq_map[HALMAC_PQ_MAP_HI ]); + value16 |=BIT_TXDMA_MGQ_MAP (adapter->pq_map[HALMAC_PQ_MAP_MG ]); + value16 |=BIT_TXDMA_BKQ_MAP (adapter->pq_map[HALMAC_PQ_MAP_BK ]); + value16 |=BIT_TXDMA_BEQ_MAP (adapter->pq_map[HALMAC_PQ_MAP_BE ]); + value16 |=BIT_TXDMA_VIQ_MAP (adapter->pq_map[HALMAC_PQ_MAP_VI ]); + value16 |=BIT_TXDMA_VOQ_MAP (adapter->pq_map[HALMAC_PQ_MAP_VO ]); +HALMAC_REG_W16 (REG_TXDMA_PQ_MAP , value16); + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +priority_queue_cfg_8822b (struct halmac_adapter *adapter, +enum halmac_trx_mode mode) +{ +u8 transfer_mode =0 ; +u8 value8; +u32 cnt; +struct halmac_txff_allocation *txff_info = &adapter->txff_alloc; +enum halmac_ret_status status; +struct halmac_pg_num *cur_pg_num =NULL ; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + + status =set_trx_fifo_info_8822b (adapter, mode); +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("set trx fifo!!\n" ); +return status; + } +if (adapter->intf ==HALMAC_INTERFACE_SDIO ) { + cur_pg_num =HALMAC_PG_NUM_SDIO_8822B ; + }else if (adapter->intf ==HALMAC_INTERFACE_PCIE ) { + cur_pg_num =HALMAC_PG_NUM_PCIE_8822B ; + }else if (adapter->intf ==HALMAC_INTERFACE_USB ) { +if (adapter->bulkout_num ==2 ) { + cur_pg_num =HALMAC_PG_NUM_2BULKOUT_8822B ; + }else if (adapter->bulkout_num ==3 ) { + cur_pg_num =HALMAC_PG_NUM_3BULKOUT_8822B ; + }else if (adapter->bulkout_num ==4 ) { + cur_pg_num =HALMAC_PG_NUM_4BULKOUT_8822B ; + }else { +pr_err ("interface not support\n" ); +return HALMAC_RET_NOT_SUPPORT ; + } + }else { +return HALMAC_RET_NOT_SUPPORT ; + } + + status =pg_num_parser_88xx (adapter, mode, cur_pg_num); +if (status !=HALMAC_RET_SUCCESS ) +return status; + +HALMAC_REG_W16 (REG_FIFOPAGE_INFO_1 , txff_info->high_queue_pg_num); +HALMAC_REG_W16 (REG_FIFOPAGE_INFO_2 , txff_info->low_queue_pg_num); +HALMAC_REG_W16 (REG_FIFOPAGE_INFO_3 , txff_info->normal_queue_pg_num); +HALMAC_REG_W16 (REG_FIFOPAGE_INFO_4 , txff_info->extra_queue_pg_num); +HALMAC_REG_W16 (REG_FIFOPAGE_INFO_5 , txff_info->pub_queue_pg_num); +HALMAC_REG_W32_SET (REG_RQPN_CTRL_2 ,BIT (31 )); + + adapter->sdio_fs.hiq_pg_num = txff_info->high_queue_pg_num; + adapter->sdio_fs.miq_pg_num = txff_info->normal_queue_pg_num; + adapter->sdio_fs.lowq_pg_num = txff_info->low_queue_pg_num; + adapter->sdio_fs.pubq_pg_num = txff_info->pub_queue_pg_num; + adapter->sdio_fs.exq_pg_num = txff_info->extra_queue_pg_num; + +HALMAC_REG_W16 (REG_FIFOPAGE_CTRL_2 , txff_info->rsvd_boundary); +HALMAC_REG_W8_SET (REG_FWHW_TXQ_CTRL +2 ,BIT (4 )); + +/*20170411 Soar*/ +/* SDIO sometimes use two CMD52 to do HALMAC_REG_W16 */ +/* and may cause a mismatch between HW status and Reg value. */ +/* A patch is to write high byte first, suggested by Argis */ +if (adapter->intf ==HALMAC_INTERFACE_SDIO ) { + value8 = (u8)(txff_info->rsvd_boundary >>8 &0xFF ); +HALMAC_REG_W8 (REG_BCNQ_BDNY_V1 +1 , value8); + value8 = (u8)(txff_info->rsvd_boundary &0xFF ); +HALMAC_REG_W8 (REG_BCNQ_BDNY_V1 , value8); + }else { +HALMAC_REG_W16 (REG_BCNQ_BDNY_V1 , txff_info->rsvd_boundary); + } + +HALMAC_REG_W16 (REG_FIFOPAGE_CTRL_2 +2 , txff_info->rsvd_boundary); + +/*20170411 Soar*/ +/* SDIO sometimes use two CMD52 to do HALMAC_REG_W16 */ +/* and may cause a mismatch between HW status and Reg value. */ +/* A patch is to write high byte first, suggested by Argis */ +if (adapter->intf ==HALMAC_INTERFACE_SDIO ) { + value8 = (u8)(txff_info->rsvd_boundary >>8 &0xFF ); +HALMAC_REG_W8 (REG_BCNQ1_BDNY_V1 +1 , value8); + value8 = (u8)(txff_info->rsvd_boundary &0xFF ); +HALMAC_REG_W8 (REG_BCNQ1_BDNY_V1 , value8); + }else { +HALMAC_REG_W16 (REG_BCNQ1_BDNY_V1 , txff_info->rsvd_boundary); + } + +HALMAC_REG_W32 (REG_RXFF_BNDY , + adapter->hw_cfg_info.rx_fifo_size - +C2H_PKT_BUF_88XX -1 ); + +if (adapter->intf ==HALMAC_INTERFACE_USB ) { + value8 =HALMAC_REG_R8 (REG_AUTO_LLT_V1 ); + value8 &= ~(BIT_MASK_BLK_DESC_NUM <<BIT_SHIFT_BLK_DESC_NUM ); + value8 |= (BLK_DESC_NUM <<BIT_SHIFT_BLK_DESC_NUM ); +HALMAC_REG_W8 (REG_AUTO_LLT_V1 , value8); + +HALMAC_REG_W8 (REG_AUTO_LLT_V1 +3 ,BLK_DESC_NUM ); +HALMAC_REG_W8_SET (REG_TXDMA_OFFSET_CHK +1 ,BIT (1 )); + } + +HALMAC_REG_W8_SET (REG_AUTO_LLT_V1 ,BIT_AUTO_INIT_LLT_V1 ); + cnt =1000 ; +while (HALMAC_REG_R8 (REG_AUTO_LLT_V1 ) &BIT_AUTO_INIT_LLT_V1 ) { + cnt--; +if (cnt ==0 ) +return HALMAC_RET_INIT_LLT_FAIL ; + } + +if (mode ==HALMAC_TRX_MODE_DELAY_LOOPBACK ) { + transfer_mode =HALMAC_TRNSFER_LOOPBACK_DELAY ; +HALMAC_REG_W16 (REG_WMAC_LBK_BUF_HD_V1 , + adapter->txff_alloc.rsvd_boundary); + }else if (mode ==HALMAC_TRX_MODE_LOOPBACK ) { + transfer_mode =HALMAC_TRNSFER_LOOPBACK_DIRECT ; + }else { + transfer_mode =HALMAC_TRNSFER_NORMAL ; + } + + adapter->hw_cfg_info.trx_mode = transfer_mode; +HALMAC_REG_W8 (REG_CR +3 , transfer_mode); + +return HALMAC_RET_SUCCESS ; +} + +static enum halmac_ret_status +set_trx_fifo_info_8822b (struct halmac_adapter *adapter, +enum halmac_trx_mode mode) +{ +u16 cur_pg_addr; +u32 txff_size =TX_FIFO_SIZE_8822B ; +u32 rxff_size =RX_FIFO_SIZE_8822B ; +struct halmac_txff_allocation *info = &adapter->txff_alloc; + +if (info->rx_fifo_exp_mode ==HALMAC_RX_FIFO_EXPANDING_MODE_1_BLOCK ) { + txff_size =TX_FIFO_SIZE_RX_EXPAND_1BLK_8822B ; + rxff_size =RX_FIFO_SIZE_RX_EXPAND_1BLK_8822B ; + } + +if (info->la_mode !=HALMAC_LA_MODE_DISABLE ) { + txff_size =TX_FIFO_SIZE_LA_8822B ; + rxff_size =RX_FIFO_SIZE_8822B ; + } + + adapter->hw_cfg_info.tx_fifo_size = txff_size; + adapter->hw_cfg_info.rx_fifo_size = rxff_size; + info->tx_fifo_pg_num = (u16)(txff_size >>TX_PAGE_SIZE_SHIFT_88XX ); + + info->rsvd_pg_num = info->rsvd_drv_pg_num + +RSVD_PG_H2C_EXTRAINFO_NUM + +RSVD_PG_H2C_STATICINFO_NUM + +RSVD_PG_H2CQ_NUM + +RSVD_PG_CPU_INSTRUCTION_NUM + +RSVD_PG_FW_TXBUF_NUM + +RSVD_PG_CSIBUF_NUM ; + +if (mode ==HALMAC_TRX_MODE_DELAY_LOOPBACK ) + info->rsvd_pg_num +=RSVD_PG_DLLB_NUM ; + +if (info->rsvd_pg_num > info->tx_fifo_pg_num) +return HALMAC_RET_CFG_TXFIFO_PAGE_FAIL ; + + info->acq_pg_num = info->tx_fifo_pg_num - info->rsvd_pg_num; + info->rsvd_boundary = info->tx_fifo_pg_num - info->rsvd_pg_num; + + cur_pg_addr = info->tx_fifo_pg_num; + cur_pg_addr -=RSVD_PG_CSIBUF_NUM ; + info->rsvd_csibuf_addr = cur_pg_addr; + cur_pg_addr -=RSVD_PG_FW_TXBUF_NUM ; + info->rsvd_fw_txbuf_addr = cur_pg_addr; + cur_pg_addr -=RSVD_PG_CPU_INSTRUCTION_NUM ; + info->rsvd_cpu_instr_addr = cur_pg_addr; + cur_pg_addr -=RSVD_PG_H2CQ_NUM ; + info->rsvd_h2cq_addr = cur_pg_addr; + cur_pg_addr -=RSVD_PG_H2C_STATICINFO_NUM ; + info->rsvd_h2c_sta_info_addr = cur_pg_addr; + cur_pg_addr -=RSVD_PG_H2C_EXTRAINFO_NUM ; + info->rsvd_h2c_info_addr = cur_pg_addr; + cur_pg_addr -= info->rsvd_drv_pg_num; + info->rsvd_drv_addr = cur_pg_addr; + +if (mode ==HALMAC_TRX_MODE_DELAY_LOOPBACK ) + info->rsvd_drv_addr -=RSVD_PG_DLLB_NUM ; + +if (info->rsvd_boundary != info->rsvd_drv_addr) +return HALMAC_RET_CFG_TXFIFO_PAGE_FAIL ; + +return HALMAC_RET_SUCCESS ; +} + +/** +* init_protocol_cfg_8822b() - config protocol register +* @adapter : the adapter of halmac +* Author : KaiYuan Chang/Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +init_protocol_cfg_8822b (struct halmac_adapter *adapter) +{ +u32 value32; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +HALMAC_REG_W8_CLR (REG_SW_AMPDU_BURST_MODE_CTRL ,BIT (6 )); + +HALMAC_REG_W8 (REG_AMPDU_MAX_TIME_V1 ,WLAN_AMPDU_MAX_TIME ); +HALMAC_REG_W8_SET (REG_TX_HANG_CTRL ,BIT_EN_EOF_V1 ); + + value32 =WLAN_RTS_LEN_TH | (WLAN_RTS_TX_TIME_TH <<8 ) | + (WLAN_MAX_AGG_PKT_LIMIT <<16 ) | + (WLAN_RTS_MAX_AGG_PKT_LIMIT <<24 ); +HALMAC_REG_W32 (REG_PROT_MODE_CTRL , value32); + +HALMAC_REG_W16 (REG_BAR_MODE_CTRL +2 , +WLAN_BAR_RETRY_LIMIT |WLAN_RA_TRY_RATE_AGG_LIMIT <<8 ); + +HALMAC_REG_W8 (REG_FAST_EDCA_VOVI_SETTING ,WALN_FAST_EDCA_VO_TH ); +HALMAC_REG_W8 (REG_FAST_EDCA_VOVI_SETTING +2 ,WLAN_FAST_EDCA_VI_TH ); +HALMAC_REG_W8 (REG_FAST_EDCA_BEBK_SETTING ,WLAN_FAST_EDCA_BE_TH ); +HALMAC_REG_W8 (REG_FAST_EDCA_BEBK_SETTING +2 ,WLAN_FAST_EDCA_BK_TH ); + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* init_h2c_8822b() - config h2c packet buffer +* @adapter : the adapter of halmac +* Author : KaiYuan Chang/Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +init_h2c_8822b (struct halmac_adapter *adapter) +{ +u8 value8; +u32 value32; +u32 h2cq_addr; +u32 h2cq_size; +struct halmac_txff_allocation *txff_info = &adapter->txff_alloc; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + + h2cq_addr = txff_info->rsvd_h2cq_addr <<TX_PAGE_SIZE_SHIFT_88XX ; + h2cq_size =RSVD_PG_H2CQ_NUM <<TX_PAGE_SIZE_SHIFT_88XX ; + + value32 =HALMAC_REG_R32 (REG_H2C_HEAD ); + value32 = (value32 &0xFFFC0000 ) | h2cq_addr; +HALMAC_REG_W32 (REG_H2C_HEAD , value32); + + value32 =HALMAC_REG_R32 (REG_H2C_READ_ADDR ); + value32 = (value32 &0xFFFC0000 ) | h2cq_addr; +HALMAC_REG_W32 (REG_H2C_READ_ADDR , value32); + + value32 =HALMAC_REG_R32 (REG_H2C_TAIL ); + value32 &=0xFFFC0000 ; + value32 |= (h2cq_addr + h2cq_size); +HALMAC_REG_W32 (REG_H2C_TAIL , value32); + + value8 =HALMAC_REG_R8 (REG_H2C_INFO ); + value8 = (u8)((value8 &0xFC ) |0x01 ); +HALMAC_REG_W8 (REG_H2C_INFO , value8); + + value8 =HALMAC_REG_R8 (REG_H2C_INFO ); + value8 = (u8)((value8 &0xFB ) |0x04 ); +HALMAC_REG_W8 (REG_H2C_INFO , value8); + + value8 =HALMAC_REG_R8 (REG_TXDMA_OFFSET_CHK +1 ); + value8 = (u8)((value8 &0x7f ) |0x80 ); +HALMAC_REG_W8 (REG_TXDMA_OFFSET_CHK +1 , value8); + + adapter->h2c_info.buf_size = h2cq_size; +get_h2c_buf_free_space_88xx (adapter); + +if (adapter->h2c_info.buf_size != adapter->h2c_info.buf_fs) { +pr_err ("get h2c free space error!\n" ); +return HALMAC_RET_GET_H2C_SPACE_ERR ; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"h2c fs : %d\n" , + adapter->h2c_info.buf_fs); + +return HALMAC_RET_SUCCESS ; +}
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_init_8822b.h new file +33 -0
@@ -0,0 +1,33 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_INIT_8822B_H_ +#define _HALMAC_INIT_8822B_H_ + +#include "../../halmac_api.h" + +enum halmac_ret_status +mount_api_8822b (struct halmac_adapter *adapter); + +enum halmac_ret_status +init_trx_cfg_8822b (struct halmac_adapter *adapter,enum halmac_trx_mode mode); + +enum halmac_ret_status +init_protocol_cfg_8822b (struct halmac_adapter *adapter); + +enum halmac_ret_status +init_h2c_8822b (struct halmac_adapter *adapter); + +#endif /* _HALMAC_INIT_8822B_H_ */
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_init_88xx.c new file +1071 -0
1,071 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_init_88xx.h new file +70 -0
70 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_api.c new file +438 -0
438 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_api.h new file +65 -0
65 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 15/19 rtlwifi: halmac: add firmware related functions and definitions
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Add H2C, C2H, fw header format, download firmware, etc.
--- .../rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.c | 316 ++++++ .../rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.h | 35 + .../rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.c | 1149 ++++++++++++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.h | 57 + .../realtek/rtlwifi/halmac/halmac_fw_info.h | 119 ++ .../rtlwifi/halmac/halmac_fw_offload_c2h_nic.h | 371 +++++++ .../rtlwifi/halmac/halmac_fw_offload_h2c_nic.h | 694 ++++++++++++ .../rtlwifi/halmac/halmac_h2c_extra_info_nic.h | 171 +++ .../rtlwifi/halmac/halmac_original_c2h_nic.h | 408 +++++++ .../rtlwifi/halmac/halmac_original_h2c_nic.h | 1143 +++++++++++++++++++ 10 files changed, 4463 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_info.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_offload_c2h_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_offload_h2c_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_h2c_extra_info_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_original_c2h_nic.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_original_h2c_nic.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.c new file +316 -0
@@ -0,0 +1,316 @@ +/****************************************************************************** +* +* Copyright(c) 2017 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_flash_88xx.h" +#include "halmac_88xx_cfg.h" +#include "halmac_common_88xx.h" + +/** +* download_flash_88xx() -download firmware to flash +* @adapter : the adapter of halmac +* @fw_bin : pointer to fw +* @size : fw size +* @rom_addr : flash start address where fw should be download +* Author : Pablo Chiu +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +download_flash_88xx (struct halmac_adapter *adapter,u8 *fw_bin,u32 size, +u32 rom_addr) +{ +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; +enum halmac_ret_status rc; +struct halmac_h2c_header_info hdr_info; +u8 value8; +u8 restore[3 ]; +u8 h2c_buf[H2C_PKT_SIZE_88XX ] = {0 }; +u16 seq_num =0 ; +u16 h2c_info_offset; +u32 pkt_size; +u32 mem_offset; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + value8 =HALMAC_REG_R8 (REG_CR +1 ); + restore[0 ] = value8; + value8 = (u8)(value8 |BIT (0 )); +HALMAC_REG_W8 (REG_CR +1 , value8); + + value8 =HALMAC_REG_R8 (REG_BCN_CTRL ); + restore[1 ] = value8; + value8 = (u8)((value8 & ~(BIT (3 ))) |BIT (4 )); +HALMAC_REG_W8 (REG_BCN_CTRL , value8); + + value8 =HALMAC_REG_R8 (REG_FWHW_TXQ_CTRL +2 ); + restore[2 ] = value8; + value8 = (u8)(value8 & ~(BIT (6 ))); +HALMAC_REG_W8 (REG_FWHW_TXQ_CTRL +2 , value8); + +/* Download FW to Flash flow */ + h2c_info_offset = adapter->txff_alloc.rsvd_h2c_info_addr - + adapter->txff_alloc.rsvd_boundary; + mem_offset =0 ; + +while (size !=0 ) { +if (size >= (DL_FLASH_RSVDPG_SIZE -48 )) + pkt_size =DL_FLASH_RSVDPG_SIZE -48 ; +else + pkt_size = size; + + rc =dl_rsvd_page_88xx (adapter, + adapter->txff_alloc.rsvd_h2c_info_addr, + fw_bin + mem_offset, pkt_size); +if (rc !=HALMAC_RET_SUCCESS ) { +pr_err ("dl rsvd pg!!\n" ); +return rc; + } + +DOWNLOAD_FLASH_SET_SPI_CMD (h2c_buf,0x02 ); +DOWNLOAD_FLASH_SET_LOCATION (h2c_buf, h2c_info_offset); +DOWNLOAD_FLASH_SET_SIZE (h2c_buf, pkt_size); +DOWNLOAD_FLASH_SET_START_ADDR (h2c_buf, rom_addr); + + hdr_info.sub_cmd_id =SUB_CMD_ID_DOWNLOAD_FLASH ; + hdr_info.content_size =20 ; + hdr_info.ack =1 ; +set_h2c_pkt_hdr_88xx (adapter, h2c_buf, &hdr_info, &seq_num); + + rc =send_h2c_pkt_88xx (adapter, h2c_buf); + +if (rc !=HALMAC_RET_SUCCESS ) { +pr_err ("send h2c!!\n" ); +return rc; + } + + value8 =HALMAC_REG_R8 (REG_MCUTST_I ); + value8 |=BIT (0 ); +HALMAC_REG_W8 (REG_MCUTST_I , value8); + + rom_addr += pkt_size; + mem_offset += pkt_size; + size -= pkt_size; + +while (((HALMAC_REG_R8 (REG_MCUTST_I )) &BIT (0 )) !=0 ) +usleep_range (1000 ,1100 ); + +if (((HALMAC_REG_R8 (REG_MCUTST_I )) &BIT (0 )) !=0 ) { +pr_err ("dl flash!!\n" ); +return HALMAC_RET_DLFW_FAIL ; + } + } + +HALMAC_REG_W8 (REG_FWHW_TXQ_CTRL +2 , restore[2 ]); +HALMAC_REG_W8 (REG_BCN_CTRL , restore[1 ]); +HALMAC_REG_W8 (REG_CR +1 , restore[0 ]); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* read_flash_88xx() -read data from flash +* @adapter : the adapter of halmac +* @addr : flash start address where fw should be read +* Author : Pablo Chiu +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +read_flash_88xx (struct halmac_adapter *adapter,u32 addr,u32 length) +{ +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; +enum halmac_ret_status status; +struct halmac_h2c_header_info hdr_info; +u8 value8; +u8 restore[3 ]; +u8 h2c_buf[H2C_PKT_SIZE_88XX ] = {0 }; +u16 seq_num =0 ; +u16 h2c_info_addr = adapter->txff_alloc.rsvd_h2c_info_addr; +u16 rsvd_pg_addr = adapter->txff_alloc.rsvd_boundary; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + value8 =HALMAC_REG_R8 (REG_CR +1 ); + restore[0 ] = value8; + value8 = (u8)(value8 |BIT (0 )); +HALMAC_REG_W8 (REG_CR +1 , value8); + + value8 =HALMAC_REG_R8 (REG_BCN_CTRL ); + restore[1 ] = value8; + value8 = (u8)((value8 & ~(BIT (3 ))) |BIT (4 )); +HALMAC_REG_W8 (REG_BCN_CTRL , value8); + + value8 =HALMAC_REG_R8 (REG_FWHW_TXQ_CTRL +2 ); + restore[2 ] = value8; + value8 = (u8)(value8 & ~(BIT (6 ))); +HALMAC_REG_W8 (REG_FWHW_TXQ_CTRL +2 , value8); + +HALMAC_REG_W16 (REG_FIFOPAGE_CTRL_2 , h2c_info_addr); + value8 =HALMAC_REG_R8 (REG_MCUTST_I ); + value8 |=BIT (0 ); +HALMAC_REG_W8 (REG_MCUTST_I , value8); + +/* Construct H2C Content */ +DOWNLOAD_FLASH_SET_SPI_CMD (h2c_buf,0x03 ); +DOWNLOAD_FLASH_SET_LOCATION (h2c_buf, h2c_info_addr - rsvd_pg_addr); +DOWNLOAD_FLASH_SET_SIZE (h2c_buf, length); +DOWNLOAD_FLASH_SET_START_ADDR (h2c_buf, addr); + +/* Fill in H2C Header */ + hdr_info.sub_cmd_id =SUB_CMD_ID_DOWNLOAD_FLASH ; + hdr_info.content_size =16 ; + hdr_info.ack =1 ; +set_h2c_pkt_hdr_88xx (adapter, h2c_buf, &hdr_info, &seq_num); + +/* Send H2C Cmd Packet */ + status =send_h2c_pkt_88xx (adapter, h2c_buf); + +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("send h2c!!\n" ); +return status; + } + +while (((HALMAC_REG_R8 (REG_MCUTST_I )) &BIT (0 )) !=0 ) +usleep_range (1000 ,1100 ); + +HALMAC_REG_W16 (REG_FIFOPAGE_CTRL_2 , rsvd_pg_addr); +HALMAC_REG_W8 (REG_FWHW_TXQ_CTRL +2 , restore[2 ]); +HALMAC_REG_W8 (REG_BCN_CTRL , restore[1 ]); +HALMAC_REG_W8 (REG_CR +1 , restore[0 ]); + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* erase_flash_88xx() -erase flash data +* @adapter : the adapter of halmac +* @erase_cmd : erase command +* @addr : flash start address where fw should be erased +* Author : Pablo Chiu +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +erase_flash_88xx (struct halmac_adapter *adapter,u8 erase_cmd,u32 addr) +{ +enum halmac_ret_status status; +struct halmac_h2c_header_info hdr_info; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; +u8 value8; +u8 h2c_buf[H2C_PKT_SIZE_88XX ] = {0 }; +u16 seq_num =0 ; +u32 cnt; + +/* Construct H2C Content */ +DOWNLOAD_FLASH_SET_SPI_CMD (h2c_buf, erase_cmd); +DOWNLOAD_FLASH_SET_LOCATION (h2c_buf,0 ); +DOWNLOAD_FLASH_SET_START_ADDR (h2c_buf, addr); +DOWNLOAD_FLASH_SET_SIZE (h2c_buf,0 ); + + value8 =HALMAC_REG_R8 (REG_MCUTST_I ); + value8 |=BIT (0 ); +HALMAC_REG_W8 (REG_MCUTST_I , value8); + +/* Fill in H2C Header */ + hdr_info.sub_cmd_id =SUB_CMD_ID_DOWNLOAD_FLASH ; + hdr_info.content_size =16 ; + hdr_info.ack =1 ; +set_h2c_pkt_hdr_88xx (adapter, h2c_buf, &hdr_info, &seq_num); + +/* Send H2C Cmd Packet */ + status =send_h2c_pkt_88xx (adapter, h2c_buf); + +if (status !=HALMAC_RET_SUCCESS ) +pr_err ("send h2c!!\n" ); + + cnt =5000 ; +while (((HALMAC_REG_R8 (REG_MCUTST_I )) &BIT (0 )) !=0 && cnt !=0 ) { +usleep_range (1000 ,1100 ); + cnt--; + } + +if (cnt ==0 ) +return HALMAC_RET_FAIL ; +else +return HALMAC_RET_SUCCESS ; +} + +/** +* check_flash_88xx() -check flash data +* @adapter : the adapter of halmac +* @fw_bin : pointer to fw +* @size : fw size +* @addr : flash start address where fw should be checked +* Author : Pablo Chiu +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +check_flash_88xx (struct halmac_adapter *adapter,u8 *fw_bin,u32 size, +u32 addr) +{ +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; +u8 value8; +u16 i; +u16 residue; +u16 pg_addr; +u32 pkt_size; +u32 start_page; +u32 cnt; + + pg_addr = adapter->txff_alloc.rsvd_h2c_info_addr; + +while (size !=0 ) { + start_page = ((pg_addr <<7 ) >>12 ) +0x780 ; + residue = (pg_addr <<7 ) & (4096 -1 ); + +if (size >=DL_FLASH_RSVDPG_SIZE ) + pkt_size =DL_FLASH_RSVDPG_SIZE ; +else + pkt_size = size; + +read_flash_88xx (adapter, addr,4096 ); + + cnt =0 ; +while (cnt < pkt_size) { +HALMAC_REG_W16 (REG_PKTBUF_DBG_CTRL , (u16)(start_page)); +for (i =0x8000 + residue; i <=0x8FFF ; i++) { + value8 =HALMAC_REG_R8 (i); +if (*fw_bin != value8) { +pr_err ("check flash!!\n" ); +return HALMAC_RET_FAIL ; + } + + fw_bin++; + cnt++; +if (cnt == pkt_size) +break ; + } + residue =0 ; + start_page++; + } + addr += pkt_size; + size -= pkt_size; + } + +return HALMAC_RET_SUCCESS ; +}
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_flash_88xx.h new file +35 -0
@@ -0,0 +1,35 @@ +/****************************************************************************** +* +* Copyright(c) 2017 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_FLASH_88XX_H_ +#define _HALMAC_FLASH_88XX_H_ + +#include "../halmac_api.h" + +enum halmac_ret_status +download_flash_88xx (struct halmac_adapter *adapter,u8 *fw_bin,u32 size, +u32 rom_addr); + +enum halmac_ret_status +read_flash_88xx (struct halmac_adapter *adapter,u32 addr,u32 length); + +enum halmac_ret_status +erase_flash_88xx (struct halmac_adapter *adapter,u8 erase_cmd,u32 addr); + +enum halmac_ret_status +check_flash_88xx (struct halmac_adapter *adapter,u8 *fw_bin,u32 size, +u32 addr); + +#endif /* _HALMAC_FLASH_88XX_H_ */
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.c new file +1149 -0
1,149 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_fw_88xx.h new file +57 -0
57 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_info.h new file +119 -0
119 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_offload_c2h_nic.h new file +371 -0
371 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_fw_offload_h2c_nic.h new file +694 -0
694 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_h2c_extra_info_nic.h new file +171 -0
171 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_original_c2h_nic.h new file +408 -0
88 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_original_h2c_nic.h new file +1143 -0
1,143 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.15.1
Part of the diff is not shown here. View the raw message.
[email protected]
maintainerPATCH v3 16/19 rtlwifi: halmac: add bus interface commands
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
The halmac supports three buses interfaces, PCI, USB and SDIO, and this commit makes it possible to change their phy parameters.
--- .../halmac_88xx/halmac_8822b/halmac_pcie_8822b.c | 218 +++++ .../halmac_88xx/halmac_8822b/halmac_pcie_8822b.h | 38 + .../halmac_88xx/halmac_8822b/halmac_phy_8822b.c | 148 ++++ .../halmac_88xx/halmac_8822b/halmac_sdio_8822b.c | 880 ++++++++++++++++++++ .../halmac_88xx/halmac_8822b/halmac_sdio_8822b.h | 62 ++ .../halmac_88xx/halmac_8822b/halmac_usb_8822b.c | 161 ++++ .../halmac_88xx/halmac_8822b/halmac_usb_8822b.h | 38 + .../rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.c | 538 +++++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.h | 98 +++ .../rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.c | 895 +++++++++++++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.h | 75 ++ .../rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.c | 522 ++++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.h | 83 ++ .../realtek/rtlwifi/halmac/halmac_intf_phy_cmd.h | 45 ++ .../realtek/rtlwifi/halmac/halmac_pcie_reg.h | 36 + .../realtek/rtlwifi/halmac/halmac_sdio_reg.h | 53 ++ .../realtek/rtlwifi/halmac/halmac_usb_reg.h | 19 + 17 files changed, 3909 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pcie_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pcie_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_phy_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_sdio_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_sdio_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_usb_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_usb_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_intf_phy_cmd.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_pcie_reg.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_sdio_reg.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_usb_reg.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pcie_8822b.c new file +218 -0
@@ -0,0 +1,218 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_pcie_8822b.h" +#include "halmac_pwr_seq_8822b.h" +#include "../halmac_init_88xx.h" +#include "../halmac_common_88xx.h" +#include "../halmac_pcie_88xx.h" +#include "../halmac_88xx_cfg.h" + +/** +* mac_pwr_switch_pcie_8822b() - switch mac power +* @adapter : the adapter of halmac +* @pwr : power state +* Author : KaiYuan Chang +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +mac_pwr_switch_pcie_8822b (struct halmac_adapter *adapter, +enum halmac_mac_power pwr) +{ +u8 value8; +u8 rpwm; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; +enum halmac_ret_status status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"pwr = %x\n" , + pwr); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"8822B pwr seq ver = %s\n" ,HALMAC_8822B_PWR_SEQ_VER ); + + adapter->rpwm =HALMAC_REG_R8 (REG_PCIE_HRPWM1_V1 ); + +/* Check FW still exist or not */ +if (HALMAC_REG_R16 (REG_MCUFW_CTRL ) ==0xC078 ) { +/* Leave 32K */ + rpwm = (u8)((adapter->rpwm ^BIT (7 )) &0x80 ); +HALMAC_REG_W8 (REG_PCIE_HRPWM1_V1 , rpwm); + } + + value8 =HALMAC_REG_R8 (REG_CR ); +if (value8 ==0xEA ) + adapter->halmac_state.mac_pwr =HALMAC_MAC_POWER_OFF ; +else + adapter->halmac_state.mac_pwr =HALMAC_MAC_POWER_ON ; + +/* Check if power switch is needed */ +if (pwr ==HALMAC_MAC_POWER_ON && + adapter->halmac_state.mac_pwr ==HALMAC_MAC_POWER_ON ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_WARNING , +"power state unchange!!\n" ); +return HALMAC_RET_PWR_UNCHANGE ; + } + +if (pwr ==HALMAC_MAC_POWER_OFF ) { + status =trxdma_check_idle_88xx (adapter); +if (status !=HALMAC_RET_SUCCESS ) +return status; +if (pwr_seq_parser_88xx (adapter, card_dis_flow_8822b) != +HALMAC_RET_SUCCESS ) { +pr_err ("Handle power off cmd error\n" ); +return HALMAC_RET_POWER_OFF_FAIL ; + } + + adapter->halmac_state.mac_pwr =HALMAC_MAC_POWER_OFF ; + adapter->halmac_state.dlfw_state =HALMAC_DLFW_NONE ; +init_adapter_dynamic_param_88xx (adapter); + }else { +if (pwr_seq_parser_88xx (adapter, card_en_flow_8822b) != +HALMAC_RET_SUCCESS ) { +pr_err ("Handle power on cmd error\n" ); +return HALMAC_RET_POWER_ON_FAIL ; + } + + adapter->halmac_state.mac_pwr =HALMAC_MAC_POWER_ON ; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* halmac_pcie_switch_8822b() - pcie gen1/gen2 switch +* @adapter : the adapter of halmac +* @cfg : gen1/gen2 selection +* Author : KaiYuan Chang +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +pcie_switch_8822b (struct halmac_adapter *adapter,enum halmac_pcie_cfg cfg) +{ +u8 value8; +u32 value32; +u8 speed =0 ; +u32 cnt =0 ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (cfg ==HALMAC_PCIE_GEN1 ) { + value8 =dbi_r8_88xx (adapter,LINK_CTRL2_REG_OFFSET ) &0xF0 ; +dbi_w8_88xx (adapter,LINK_CTRL2_REG_OFFSET , value8 |BIT (0 )); + + value32 =dbi_r32_88xx (adapter,GEN2_CTRL_OFFSET ); +dbi_w32_88xx (adapter,GEN2_CTRL_OFFSET , value32 |BIT (17 )); + + speed =dbi_r8_88xx (adapter,LINK_STATUS_REG_OFFSET ) &0x0F ; + cnt =2000 ; + +while ((speed !=PCIE_GEN1_SPEED ) && (cnt !=0 )) { +usleep_range (50 ,60 ); + speed =dbi_r8_88xx (adapter,LINK_STATUS_REG_OFFSET ); + speed &=0x0F ; + cnt--; + } + +if (speed !=PCIE_GEN1_SPEED ) { +pr_err ("Speed change to GEN1 fail !\n" ); +return HALMAC_RET_FAIL ; + } + + }else if (cfg ==HALMAC_PCIE_GEN2 ) { + value8 =dbi_r8_88xx (adapter,LINK_CTRL2_REG_OFFSET ) &0xF0 ; +dbi_w8_88xx (adapter,LINK_CTRL2_REG_OFFSET , value8 |BIT (1 )); + + value32 =dbi_r32_88xx (adapter,GEN2_CTRL_OFFSET ); +dbi_w32_88xx (adapter,GEN2_CTRL_OFFSET , value32 |BIT (17 )); + + speed =dbi_r8_88xx (adapter,LINK_STATUS_REG_OFFSET ) &0x0F ; + cnt =2000 ; + +while ((speed !=PCIE_GEN2_SPEED ) && (cnt !=0 )) { +usleep_range (50 ,60 ); + speed =dbi_r8_88xx (adapter,LINK_STATUS_REG_OFFSET ); + speed &=0x0F ; + cnt--; + } + +if (speed !=PCIE_GEN2_SPEED ) { +pr_err ("Speed change to GEN1 fail !\n" ); +return HALMAC_RET_FAIL ; + } + + }else { +pr_err ("Error Speed !\n" ); +return HALMAC_RET_FAIL ; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* phy_cfg_pcie_8822b() - phy config +* @adapter : the adapter of halmac +* Author : KaiYuan Chang +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +phy_cfg_pcie_8822b (struct halmac_adapter *adapter, +enum halmac_intf_phy_platform pltfm) +{ +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + + status =parse_intf_phy_88xx (adapter, pcie_gen1_phy_param_8822b, pltfm, +HAL_INTF_PHY_PCIE_GEN1 ); + +if (status !=HALMAC_RET_SUCCESS ) +return status; + + status =parse_intf_phy_88xx (adapter, pcie_gen2_phy_param_8822b, pltfm, +HAL_INTF_PHY_PCIE_GEN2 ); + +if (status !=HALMAC_RET_SUCCESS ) +return status; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* intf_tun_pcie_8822b() - pcie interface fine tuning +* @adapter : the adapter of halmac +* Author : Rick Liu +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +intf_tun_pcie_8822b (struct halmac_adapter *adapter) +{ +return HALMAC_RET_SUCCESS ; +}
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_pcie_8822b.h new file +38 -0
@@ -0,0 +1,38 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_API_8822B_PCIE_H_ +#define _HALMAC_API_8822B_PCIE_H_ + +#include "../../halmac_api.h" + +extern struct halmac_intf_phy_para pcie_gen1_phy_param_8822b[]; +extern struct halmac_intf_phy_para pcie_gen2_phy_param_8822b[]; + +enum halmac_ret_status +mac_pwr_switch_pcie_8822b (struct halmac_adapter *adapter, +enum halmac_mac_power pwr); + +enum halmac_ret_status +pcie_switch_8822b (struct halmac_adapter *adapter,enum halmac_pcie_cfg cfg); + +enum halmac_ret_status +phy_cfg_pcie_8822b (struct halmac_adapter *adapter, +enum halmac_intf_phy_platform pltfm); + +enum halmac_ret_status +intf_tun_pcie_8822b (struct halmac_adapter *adapter); + +#endif /* _HALMAC_API_8822B_PCIE_H_ */
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_phy_8822b.c new file +148 -0
148 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_sdio_8822b.c new file +880 -0
880 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_sdio_8822b.h new file +62 -0
62 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_usb_8822b.c new file +161 -0
161 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_usb_8822b.h new file +38 -0
@@ -0,0 +1,38 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_API_8822B_USB_H_ +#define _HALMAC_API_8822B_USB_H_ + +#include "../../halmac_api.h" + +extern struct halmac_intf_phy_para usb2_phy_param_8822b[]; +extern struct halmac_intf_phy_para usb3_phy_param_8822b[]; + +enum halmac_ret_status +mac_pwr_switch_usb_8822b (struct halmac_adapter *adapter, +enum halmac_mac_power pwr); + +enum halmac_ret_status +phy_cfg_usb_8822b (struct halmac_adapter *adapter, +enum halmac_intf_phy_platform pltfm); + +enum halmac_ret_status +pcie_switch_usb_8822b (struct halmac_adapter *adapter,enum halmac_pcie_cfg cfg); + +enum halmac_ret_status +intf_tun_usb_8822b (struct halmac_adapter *adapter); + +#endif /* _HALMAC_API_8822B_USB_H_ */
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.c new file +538 -0
538 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_pcie_88xx.h new file +98 -0
98 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.c new file +895 -0
819 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_sdio_88xx.h new file +75 -0
75 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.c new file +522 -0
522 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_usb_88xx.h new file +83 -0
83 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_intf_phy_cmd.h new file +45 -0
45 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_pcie_reg.h new file +36 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_sdio_reg.h new file +53 -0
53 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_usb_reg.h new file +19 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.15.1
Part of the diff is not shown here. View the raw message.
[email protected]
maintainerPATCH v3 17/19 rtlwifi: halmac: add to control WiFi mac functions and registers
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
This commit provides WiFi mac functions to control wifi easier, and also provides generic access entries for driver and other modules.
--- .../halmac_8822b/halmac_cfg_wmac_8822b.c | 144 + .../halmac_8822b/halmac_cfg_wmac_8822b.h | 36 + .../halmac_88xx/halmac_8822b/halmac_common_8822b.c | 173 ++ .../halmac_88xx/halmac_8822b/halmac_common_8822b.h | 32 + .../halmac/halmac_88xx/halmac_cfg_wmac_88xx.c | 1158 ++++++++ .../halmac/halmac_88xx/halmac_cfg_wmac_88xx.h | 122 + .../halmac/halmac_88xx/halmac_common_88xx.c | 2931 ++++++++++++++++++++ .../halmac/halmac_88xx/halmac_common_88xx.h | 151 + 8 files changed, 4747 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_cfg_wmac_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_cfg_wmac_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_common_8822b.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_common_8822b.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_cfg_wmac_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_cfg_wmac_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_common_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_common_88xx.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_cfg_wmac_8822b.c new file +144 -0
@@ -0,0 +1,144 @@ +/****************************************************************************** +* +* Copyright(c) 2017 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_cfg_wmac_8822b.h" +#include "halmac_8822b_cfg.h" + +/** +* cfg_drv_info_8822b() - config driver info +* @adapter : the adapter of halmac +* @drv_info : driver information selection +* Author : KaiYuan Chang/Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +cfg_drv_info_8822b (struct halmac_adapter *adapter, +enum halmac_drv_info drv_info) +{ +u8 drv_info_size =0 ; +u8 phy_status_en =0 ; +u8 sniffer_en =0 ; +u8 plcp_hdr_en =0 ; +u8 value8; +u32 value32; +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"drv info = %d\n" , drv_info); + +switch (drv_info) { +case HALMAC_DRV_INFO_NONE : + drv_info_size =0 ; + phy_status_en =0 ; + sniffer_en =0 ; + plcp_hdr_en =0 ; +break ; +case HALMAC_DRV_INFO_PHY_STATUS : + drv_info_size =4 ; + phy_status_en =1 ; + sniffer_en =0 ; + plcp_hdr_en =0 ; +break ; +case HALMAC_DRV_INFO_PHY_SNIFFER : + drv_info_size =5 ;/* phy status 4byte, sniffer info 1byte */ + phy_status_en =1 ; + sniffer_en =1 ; + plcp_hdr_en =0 ; +break ; +case HALMAC_DRV_INFO_PHY_PLCP : + drv_info_size =6 ;/* phy status 4byte, plcp header 2byte */ + phy_status_en =1 ; + sniffer_en =0 ; + plcp_hdr_en =1 ; +break ; +default : +return HALMAC_RET_SW_CASE_NOT_SUPPORT ; + } + +if (adapter->txff_alloc.rx_fifo_exp_mode != +HALMAC_RX_FIFO_EXPANDING_MODE_DISABLE ) + drv_info_size =RX_DESC_DUMMY_SIZE_8822B >>3 ; + +HALMAC_REG_W8 (REG_RX_DRVINFO_SZ , drv_info_size); + + value8 =HALMAC_REG_R8 (REG_TRXFF_BNDY +1 ); + value8 &=0xF0 ; +/* For rxdesc len = 0 issue */ + value8 |=0xF ; +HALMAC_REG_W8 (REG_TRXFF_BNDY +1 , value8); + + adapter->drv_info_size = drv_info_size; + + value32 =HALMAC_REG_R32 (REG_RCR ); + value32 = (value32 & (~BIT_APP_PHYSTS )); +if (phy_status_en ==1 ) + value32 = value32 |BIT_APP_PHYSTS ; +HALMAC_REG_W32 (REG_RCR , value32); + + value32 =HALMAC_REG_R32 (REG_WMAC_OPTION_FUNCTION +4 ); + value32 = (value32 & (~(BIT (8 ) |BIT (9 )))); +if (sniffer_en ==1 ) + value32 = value32 |BIT (9 ); +if (plcp_hdr_en ==1 ) + value32 = value32 |BIT (8 ); +HALMAC_REG_W32 (REG_WMAC_OPTION_FUNCTION +4 , value32); + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* init_low_pwr_8822b() - config WMAC register +* @adapter +* Author : KaiYuan Chang/Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +init_low_pwr_8822b (struct halmac_adapter *adapter) +{ +return HALMAC_RET_SUCCESS ; +} + +void +cfg_rx_ignore_8822b (struct halmac_adapter *adapter, +struct halmac_mac_rx_ignore_cfg *cfg) +{ +} + +enum halmac_ret_status +cfg_ampdu_8822b (struct halmac_adapter *adapter, +struct halmac_ampdu_config *cfg) +{ +struct halmac_api *api = (struct halmac_api *)adapter->halmac_api; + +if (cfg->ht_max_len != cfg->vht_max_len) { +pr_err ("max len ht != vht!!\n" ); +return HALMAC_RET_PARA_NOT_SUPPORT ; + } + +HALMAC_REG_W8 (REG_PROT_MODE_CTRL +2 , cfg->max_agg_num); +HALMAC_REG_W8 (REG_PROT_MODE_CTRL +3 , cfg->max_agg_num); + +if (cfg->max_len_en ==1 ) +HALMAC_REG_W32 (REG_AMPDU_MAX_LENGTH , cfg->ht_max_len); + +return HALMAC_RET_SUCCESS ; +}
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_cfg_wmac_8822b.h new file +36 -0
@@ -0,0 +1,36 @@ +/****************************************************************************** +* +* Copyright(c) 2017 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_CFG_WMAC_8822B_H_ +#define _HALMAC_CFG_WMAC_8822B_H_ + +#include "../../halmac_api.h" + +enum halmac_ret_status +cfg_drv_info_8822b (struct halmac_adapter *adapter, +enum halmac_drv_info drv_info); + +enum halmac_ret_status +init_low_pwr_8822b (struct halmac_adapter *adapter); + +void +cfg_rx_ignore_8822b (struct halmac_adapter *adapter, +struct halmac_mac_rx_ignore_cfg *cfg); + +enum halmac_ret_status +cfg_ampdu_8822b (struct halmac_adapter *adapter, +struct halmac_ampdu_config *cfg); + +#endif /* _HALMAC_CFG_WMAC_8822B_H_ */
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_common_8822b.c new file +173 -0
173 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_8822b/halmac_common_8822b.h new file +32 -0
@@ -0,0 +1,32 @@ +/****************************************************************************** +* +* Copyright(c) 2017 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#ifndef _HALMAC_COMMON_8822B_H_ +#define _HALMAC_COMMON_8822B_H_ + +#include "../../halmac_api.h" + +enum halmac_ret_status +get_hw_value_8822b (struct halmac_adapter *adapter, +enum halmac_hw_id hw_id,void *value); + +enum halmac_ret_status +set_hw_value_8822b (struct halmac_adapter *adapter, +enum halmac_hw_id hw_id,void *value); + +enum halmac_ret_status +fill_txdesc_check_sum_8822b (struct halmac_adapter *adapter,u8 *txdesc); + +#endif /* _HALMAC_COMMON_8822B_H_ */
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_cfg_wmac_88xx.c new file +1158 -0
1,158 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_cfg_wmac_88xx.h new file +122 -0
122 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_common_88xx.c new file +2931 -0
1,335 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_common_88xx.h new file +151 -0
151 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.15.1
Part of the diff is not shown here. View the raw message.
[email protected]
maintainerPATCH v3 18/19 rtlwifi: halmac: add to support BB and RF functions
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Some BB and RF functions collaborate with firmware or MAC. For instances, the IQK and PSD functions are implemented in firmware, so use a H2C command to trigger. For MIMO function, use the helper functions to control related MAC registers.
--- .../rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.c | 397 ++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.h | 53 ++ .../rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.c | 869 +++++++++++++++++++++ .../rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.h | 79 ++ 4 files changed, 1398 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.h create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.c create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.h
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.c new file +397 -0
@@ -0,0 +1,397 @@ +/****************************************************************************** +* +* Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +******************************************************************************/ + +#include "halmac_bb_rf_88xx.h" +#include "halmac_88xx_cfg.h" +#include "halmac_common_88xx.h" +#include "halmac_init_88xx.h" + +/** +* start_iqk_88xx() -trigger FW IQK +* @adapter : the adapter of halmac +* @param : IQK parameter +* Author : KaiYuan Chang/Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +start_iqk_88xx (struct halmac_adapter *adapter,struct halmac_iqk_para *param) +{ +u8 h2c_buf[H2C_PKT_SIZE_88XX ] = {0 }; +u16 seq_num =0 ; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +struct halmac_h2c_header_info hdr_info; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.iqk_state.proc_status; + +if (halmac_fw_validate (adapter) !=HALMAC_RET_SUCCESS ) +return HALMAC_RET_NO_DLFW ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"Wait event(iqk)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + + *proc_status =HALMAC_CMD_PROCESS_SENDING ; + +IQK_SET_CLEAR (h2c_buf, param->clear); +IQK_SET_SEGMENT_IQK (h2c_buf, param->segment_iqk); + + hdr_info.sub_cmd_id =SUB_CMD_ID_IQK ; + hdr_info.content_size =1 ; + hdr_info.ack =1 ; +set_h2c_pkt_hdr_88xx (adapter, h2c_buf, &hdr_info, &seq_num); + + adapter->halmac_state.iqk_state.seq_num = seq_num; + + status =send_h2c_pkt_88xx (adapter, h2c_buf); + +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("send h2c pkt fail!!\n" ); +reset_ofld_feature_88xx (adapter,HALMAC_FEATURE_IQK ); +return status; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +/** +* ctrl_pwr_tracking_88xx() -trigger FW power tracking +* @adapter : the adapter of halmac +* @opt : power tracking option +* Author : KaiYuan Chang/Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +ctrl_pwr_tracking_88xx (struct halmac_adapter *adapter, +struct halmac_pwr_tracking_option *opt) +{ +u8 h2c_buf[H2C_PKT_SIZE_88XX ] = {0 }; +u16 seq_num =0 ; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +struct halmac_h2c_header_info hdr_info; +struct halmac_pwr_tracking_para *param; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.pwr_trk_state.proc_status; + +if (halmac_fw_validate (adapter) !=HALMAC_RET_SUCCESS ) +return HALMAC_RET_NO_DLFW ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"Wait event(pwr tracking)...\n" ); +return HALMAC_RET_BUSY_STATE ; + } + + *proc_status =HALMAC_CMD_PROCESS_SENDING ; + +PWR_TRK_SET_TYPE (h2c_buf, opt->type); +PWR_TRK_SET_BBSWING_INDEX (h2c_buf, opt->bbswing_index); + + param = &opt->pwr_tracking_para[HALMAC_RF_PATH_A ]; +PWR_TRK_SET_ENABLE_A (h2c_buf, param->enable); +PWR_TRK_SET_TX_PWR_INDEX_A (h2c_buf, param->tx_pwr_index); +PWR_TRK_SET_TSSI_VALUE_A (h2c_buf, param->tssi_value); +PWR_TRK_SET_OFFSET_VALUE_A (h2c_buf, param->pwr_tracking_offset_value); + + param = &opt->pwr_tracking_para[HALMAC_RF_PATH_B ]; +PWR_TRK_SET_ENABLE_B (h2c_buf, param->enable); +PWR_TRK_SET_TX_PWR_INDEX_B (h2c_buf, param->tx_pwr_index); +PWR_TRK_SET_TSSI_VALUE_B (h2c_buf, param->tssi_value); +PWR_TRK_SET_OFFSET_VALUE_B (h2c_buf, param->pwr_tracking_offset_value); + + param = &opt->pwr_tracking_para[HALMAC_RF_PATH_C ]; +PWR_TRK_SET_ENABLE_C (h2c_buf, param->enable); +PWR_TRK_SET_TX_PWR_INDEX_C (h2c_buf, param->tx_pwr_index); +PWR_TRK_SET_TSSI_VALUE_C (h2c_buf, param->tssi_value); +PWR_TRK_SET_OFFSET_VALUE_C (h2c_buf, param->pwr_tracking_offset_value); + + param = &opt->pwr_tracking_para[HALMAC_RF_PATH_D ]; +PWR_TRK_SET_ENABLE_D (h2c_buf, param->enable); +PWR_TRK_SET_TX_PWR_INDEX_D (h2c_buf, param->tx_pwr_index); +PWR_TRK_SET_TSSI_VALUE_D (h2c_buf, param->tssi_value); +PWR_TRK_SET_OFFSET_VALUE_D (h2c_buf, param->pwr_tracking_offset_value); + + hdr_info.sub_cmd_id =SUB_CMD_ID_PWR_TRK ; + hdr_info.content_size =20 ; + hdr_info.ack =1 ; +set_h2c_pkt_hdr_88xx (adapter, h2c_buf, &hdr_info, &seq_num); + + adapter->halmac_state.pwr_trk_state.seq_num = seq_num; + + status =send_h2c_pkt_88xx (adapter, h2c_buf); + +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("send h2c pkt fail!!\n" ); +reset_ofld_feature_88xx (adapter,HALMAC_FEATURE_POWER_TRACKING ); +return status; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_iqk_status_88xx (struct halmac_adapter *adapter, +enum halmac_cmd_process_status *proc_status) +{ + *proc_status = adapter->halmac_state.iqk_state.proc_status; + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_pwr_trk_status_88xx (struct halmac_adapter *adapter, +enum halmac_cmd_process_status *proc_status) +{ + *proc_status = adapter->halmac_state.pwr_trk_state.proc_status; + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_psd_status_88xx (struct halmac_adapter *adapter, +enum halmac_cmd_process_status *proc_status,u8 *data, +u32 *size) +{ +struct halmac_psd_state *state = &adapter->halmac_state.psd_state; + + *proc_status = state->proc_status; + +if (!data) +return HALMAC_RET_NULL_POINTER ; + +if (!size) +return HALMAC_RET_NULL_POINTER ; + +if (*proc_status ==HALMAC_CMD_PROCESS_DONE ) { +if (*size < state->data_size) { + *size = state->data_size; +return HALMAC_RET_BUFFER_TOO_SMALL ; + } + + *size = state->data_size; +memcpy (data, state->data, *size); + } + +return HALMAC_RET_SUCCESS ; +} + +/** +* psd_88xx() - trigger fw psd +* @adapter : the adapter of halmac +* @start_psd : start PSD +* @end_psd : end PSD +* Author : KaiYuan Chang/Ivan Lin +* Return : enum halmac_ret_status +* More details of status code can be found in prototype document +*/ +enum halmac_ret_status +psd_88xx (struct halmac_adapter *adapter,u16 start_psd,u16 end_psd) +{ +u8 h2c_buf[H2C_PKT_SIZE_88XX ] = {0 }; +u16 seq_num =0 ; +enum halmac_ret_status status =HALMAC_RET_SUCCESS ; +struct halmac_h2c_header_info hdr_info; +enum halmac_cmd_process_status *proc_status; + + proc_status = &adapter->halmac_state.psd_state.proc_status; + +if (halmac_fw_validate (adapter) !=HALMAC_RET_SUCCESS ) +return HALMAC_RET_NO_DLFW ; + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s ===>\n" , + __func__); + +if (*proc_status ==HALMAC_CMD_PROCESS_SENDING ) { +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"Wait event(psd)\n" ); +return HALMAC_RET_BUSY_STATE ; + } + +kfree (adapter->halmac_state.psd_state.data); + adapter->halmac_state.psd_state.data = (u8 *)NULL ; + + adapter->halmac_state.psd_state.data_size =0 ; + adapter->halmac_state.psd_state.seg_size =0 ; + + *proc_status =HALMAC_CMD_PROCESS_SENDING ; + +PSD_SET_START_PSD (h2c_buf, start_psd); +PSD_SET_END_PSD (h2c_buf, end_psd); + + hdr_info.sub_cmd_id =SUB_CMD_ID_PSD ; + hdr_info.content_size =4 ; + hdr_info.ack =1 ; +set_h2c_pkt_hdr_88xx (adapter, h2c_buf, &hdr_info, &seq_num); + + status =send_h2c_pkt_88xx (adapter, h2c_buf); + +if (status !=HALMAC_RET_SUCCESS ) { +pr_err ("send h2c pkt fail!!\n" ); +reset_ofld_feature_88xx (adapter,HALMAC_FEATURE_PSD ); +return status; + } + +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG ,"%s <===\n" , + __func__); + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_h2c_ack_iqk_88xx (struct halmac_adapter *adapter,u8 *buf,u32 size) +{ +u8 seq_num; +u8 fw_rc; +struct halmac_iqk_state *state = &adapter->halmac_state.iqk_state; +enum halmac_cmd_process_status proc_status; + + seq_num = (u8 )H2C_ACK_HDR_GET_H2C_SEQ (buf); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"Seq num : h2c->%d c2h->%d\n" , state->seq_num, seq_num); +if (seq_num != state->seq_num) { +pr_err ("Seq num mismatch : h2c->%d c2h->%d\n" , state->seq_num, + seq_num); +return HALMAC_RET_SUCCESS ; + } + +if (state->proc_status !=HALMAC_CMD_PROCESS_SENDING ) { +pr_err ("not cmd sending\n" ); +return HALMAC_RET_SUCCESS ; + } + + fw_rc = (u8 )H2C_ACK_HDR_GET_H2C_RETURN_CODE (buf); + state->fw_rc = fw_rc; + +if ((enum halmac_h2c_return_code )fw_rc ==HALMAC_H2C_RETURN_SUCCESS ) { + proc_status =HALMAC_CMD_PROCESS_DONE ; + state->proc_status = proc_status; +PLTFM_EVENT_SIG (HALMAC_FEATURE_IQK , proc_status,NULL ,0 ); + }else { + proc_status =HALMAC_CMD_PROCESS_ERROR ; + state->proc_status = proc_status; +PLTFM_EVENT_SIG (HALMAC_FEATURE_IQK , proc_status, &fw_rc,1 ); + } + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_h2c_ack_pwr_trk_88xx (struct halmac_adapter *adapter,u8 *buf,u32 size) +{ +u8 seq_num; +u8 fw_rc; +struct halmac_pwr_tracking_state *state; +enum halmac_cmd_process_status proc_status; + + state = &adapter->halmac_state.pwr_trk_state; + + seq_num = (u8 )H2C_ACK_HDR_GET_H2C_SEQ (buf); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"Seq num : h2c->%d c2h->%d\n" , state->seq_num, seq_num); +if (seq_num != state->seq_num) { +pr_err ("Seq num mismatch : h2c->%d c2h->%d\n" , state->seq_num, + seq_num); +return HALMAC_RET_SUCCESS ; + } + +if (state->proc_status !=HALMAC_CMD_PROCESS_SENDING ) { +pr_err ("not cmd sending\n" ); +return HALMAC_RET_SUCCESS ; + } + + fw_rc = (u8 )H2C_ACK_HDR_GET_H2C_RETURN_CODE (buf); + state->fw_rc = fw_rc; + +if ((enum halmac_h2c_return_code )fw_rc ==HALMAC_H2C_RETURN_SUCCESS ) { + proc_status =HALMAC_CMD_PROCESS_DONE ; + state->proc_status = proc_status; +PLTFM_EVENT_SIG (HALMAC_FEATURE_POWER_TRACKING , proc_status, +NULL ,0 ); + }else { + proc_status =HALMAC_CMD_PROCESS_ERROR ; + state->proc_status = proc_status; +PLTFM_EVENT_SIG (HALMAC_FEATURE_POWER_TRACKING , proc_status, + &fw_rc,1 ); + } + +return HALMAC_RET_SUCCESS ; +} + +enum halmac_ret_status +get_psd_data_88xx (struct halmac_adapter *adapter,u8 *buf,u32 size) +{ +u8 seg_id; +u8 seg_size; +u8 seq_num; +u16 total_size; +enum halmac_cmd_process_status proc_status; +struct halmac_psd_state *state = &adapter->halmac_state.psd_state; + + seq_num = (u8 )PSD_DATA_GET_H2C_SEQ (buf); +RT_TRACE (adapter->drv_adapter,COMP_HALMAC ,DBG_DMESG , +"seq num : h2c->%d c2h->%d\n" , state->seq_num, seq_num); +if (seq_num != state->seq_num) { +pr_err ("seq num mismatch : h2c->%d c2h->%d\n" , state->seq_num, + seq_num); +return HALMAC_RET_SUCCESS ; + } + +if (state->proc_status !=HALMAC_CMD_PROCESS_SENDING ) { +pr_err ("not cmd sending\n" ); +return HALMAC_RET_SUCCESS ; + } + + total_size = (u16 )PSD_DATA_GET_TOTAL_SIZE (buf); + seg_id = (u8 )PSD_DATA_GET_SEGMENT_ID (buf); + seg_size = (u8 )PSD_DATA_GET_SEGMENT_SIZE (buf); + state->data_size = total_size; + +if (!state->data) + state->data =kzalloc (state->data_size,GFP_KERNEL ); + +if (seg_id ==0 ) + state->seg_size = seg_size; + +memcpy (state->data + seg_id * state->seg_size, + buf +C2H_DATA_OFFSET_88XX , seg_size); + +if (PSD_DATA_GET_END_SEGMENT (buf) ==0 ) +return HALMAC_RET_SUCCESS ; + + proc_status =HALMAC_CMD_PROCESS_DONE ; + state->proc_status = proc_status; + +PLTFM_EVENT_SIG (HALMAC_FEATURE_PSD , proc_status, state->data, + state->data_size); + +return HALMAC_RET_SUCCESS ; +}
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_bb_rf_88xx.h new file +53 -0
53 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.c new file +869 -0
869 lines not on this page · raw message
drivers/net/wireless/realtek/rtlwifi/halmac/halmac_88xx/halmac_mimo_88xx.h new file +79 -0
79 lines not on this page · raw message
Signature · 1 line
2.15.1
[email protected]
maintainerPATCH v3 19/19 rtlwifi: add halmac to Makefile and Kconfig
In reply to [email protected]From: Ping-Ke Shih <[email protected]>
Add halmac to Makefile and Kconfig, so we can build this module if 8822BE is selected.
--- drivers/net/wireless/realtek/rtlwifi/Kconfig | 5 ++++ drivers/net/wireless/realtek/rtlwifi/Makefile | 1 + .../net/wireless/realtek/rtlwifi/halmac/Makefile | 29 ++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 drivers/net/wireless/realtek/rtlwifi/halmac/Makefile
drivers/net/wireless/realtek/rtlwifi/Kconfig +5 -0
@@ -151,4 +151,9 @@ config RTLBTCOEXIST depends on RTL8723AE || RTL8723BE || RTL8821AE || RTL8192EE default y +config RTLHALMAC + tristate + depends on RTL8822BE + default y + endif
drivers/net/wireless/realtek/rtlwifi/Makefile +1 -0
@@ -28,6 +28,7 @@ obj-$(CONFIG_RTL8723AE) += rtl8723ae/ obj-$(CONFIG_RTL8723BE) += rtl8723be/ obj-$(CONFIG_RTL8188EE) += rtl8188ee/ obj-$(CONFIG_RTLBTCOEXIST) += btcoexist/ +obj-$(CONFIG_RTLHALMAC) += halmac/ obj-$(CONFIG_RTL8723_COMMON) += rtl8723com/ obj-$(CONFIG_RTL8821AE) += rtl8821ae/ obj-$(CONFIG_RTL8192EE) += rtl8192ee/
drivers/net/wireless/realtek/rtlwifi/halmac/Makefile new file +29 -0
@@ -0,0 +1,29 @@ + + +halmac-objs := \ + halmac_api.o \ + halmac_88xx/halmac_bb_rf_88xx.o \ + halmac_88xx/halmac_efuse_88xx.o \ + halmac_88xx/halmac_gpio_88xx.o \ + halmac_88xx/halmac_pcie_88xx.o \ + halmac_88xx/halmac_sdio_88xx.o \ + halmac_88xx/halmac_usb_88xx.o \ + halmac_88xx/halmac_cfg_wmac_88xx.o \ + halmac_88xx/halmac_flash_88xx.o \ + halmac_88xx/halmac_init_88xx.o \ + halmac_88xx/halmac_common_88xx.o \ + halmac_88xx/halmac_fw_88xx.o \ + halmac_88xx/halmac_mimo_88xx.o \ + halmac_88xx/halmac_8822b/halmac_gpio_8822b.o \ + halmac_88xx/halmac_8822b/halmac_pcie_8822b.o \ + halmac_88xx/halmac_8822b/halmac_sdio_8822b.o \ + halmac_88xx/halmac_8822b/halmac_usb_8822b.o \ + halmac_88xx/halmac_8822b/halmac_pwr_seq_8822b.o \ + halmac_88xx/halmac_8822b/halmac_common_8822b.o \ + halmac_88xx/halmac_8822b/halmac_cfg_wmac_8822b.o \ + halmac_88xx/halmac_8822b/halmac_phy_8822b.o \ + halmac_88xx/halmac_8822b/halmac_init_8822b.o \ + rtl_halmac.o + + +obj-m = halmac.o
Signature · 1 line
2.15.1
Quoted 5 lines · <[email protected]> writes:
From: Ping-Ke Shih <[email protected]>
v3: patch 06/17 in v2 is too big, so mail server may block the mail.
In this patchset, I decompose the patch into three patches 06/19-08/19, so in patchset view v2 and v3 are identical.
I can confirm, all patches made it to patchwork now.
Quoted 19 lines
v2: remove indirection to get halmac ops
Only patches 1/17 and 11/17 are changed.Patches 1/19-3/19 are added structure to support this module. Patches 4/19-18/19 add new files.
Patch 19/19 add this module toMakefileandKconfig.Ping-Ke Shih (19):
rtlwifi: add halmac structure towifi.h
rtlwifi: add debug IDCOMP_HALMAC
rtlwifi: adddmdef.hto share with driver and other modules
rtlwifi: halmac: add main definition used by halmac
rtlwifi: halmac: describe number and size of chip functions
rtlwifi: halmac: add register definitions
rtlwifi: halmac: add bit field definitions
rtlwifi: halmac: add bit field definitions of rtl8822b
rtlwifi: halmac: add definition of TX/RX descriptor
rtlwifi: halmac: add GPIO pin/pinmux definitions
rtlwifi: halmac: add power sequence to turn on/off wifi card
Quoted 8 lines
rtlwifi: halmac: access efuse through halmac helper functions
rtlwifi: halmac: add files to implement halmac ops
rtlwifi: halmac: add halmac init/deinit functions
rtlwifi: halmac: add firmware related functions and definitions
rtlwifi: halmac: add bus interface commands
rtlwifi: halmac: add to control WiFi mac functions and registers
rtlwifi: halmac: add to support BB and RF functions
rtlwifi: add halmac toMakefileandKconfig
You are adding a new component to rtlwifi but there's no introduction in the cover letter. Why is this needed? For what hardware is it for? What new features does it bring?
Quoted 1 line
77 files changed, 64201 insertions(+)
This is a huge patchset, I'm not even sure if I want to start reviewing this. Especially when I have no clue about the big picture (which should be described in the cover letter).
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches#too_many_patches
And I even read all 19 commit logs and there was no mention of why this is needed either. I cannot just blindly apply patches without knowing what they do.
Signature · 1 line
Kalle Valo