/******************************************************************************
 *
 * Copyright(c) 2013 - 2015 Intel Corporation. All rights reserved.
 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
 * Copyright (C) 2018 Intel Corporation
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name Intel Corporation nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *****************************************************************************/
#ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_DBG_CFG_H_
#define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_DBG_CFG_H_

/*
 * with DBG_CFG_REINCLUDE set this file should contain nothing
 * but IWL_DBG_CFG() macro invocations so it can be used in
 * the C file to generate more code (e.g. for debugfs and the
 * struct initialization with default values)
 */
#ifndef DBG_CFG_REINCLUDE
#include <linux/types.h>

struct iwl_dbg_cfg_bin {
    const void* data;
    unsigned int len;
};

struct iwl_dbg_cfg {
    bool loaded;

#define IWL_DBG_CFG(type, name) type name;
#define IWL_DBG_CFG_NODEF(type, name) type name;
#define IWL_DBG_CFG_BIN(name) struct iwl_dbg_cfg_bin name;
#define IWL_DBG_CFG_STR(name) const char* name;
#define IWL_DBG_CFG_BINA(name, max)   \
    struct iwl_dbg_cfg_bin name[max]; \
    int n_##name;
#define IWL_DBG_CFG_RANGE(type, name, min, max) IWL_DBG_CFG(type, name)
#define IWL_MOD_PARAM(type, name) /* do nothing */
#define IWL_MVM_MOD_PARAM(type, name) \
    type mvm_##name;                  \
    bool __mvm_mod_param_##name;

#endif /* DBG_CFG_REINCLUDE */
#if IS_ENABLED(CPTCFG_IWLXVT)
    IWL_DBG_CFG(uint32_t, XVT_DEFAULT_DBGM_MEM_POWER)
    IWL_DBG_CFG(uint32_t, XVT_DEFAULT_DBGM_LMAC_MASK)
    IWL_DBG_CFG(uint32_t, XVT_DEFAULT_DBGM_PRPH_MASK)
    IWL_MOD_PARAM(bool, xvt_default_mode)
#endif
    IWL_DBG_CFG_NODEF(bool, disable_52GHz)
    IWL_DBG_CFG_NODEF(bool, disable_24GHz)
#if IS_ENABLED(CPTCFG_IWLMVM) || IS_ENABLED(CPTCFG_IWLFMAC)
    IWL_DBG_CFG_NODEF(uint32_t, MVM_CALIB_OVERRIDE_CONTROL)
    IWL_DBG_CFG_NODEF(uint32_t, MVM_CALIB_INIT_FLOW)
    IWL_DBG_CFG_NODEF(uint32_t, MVM_CALIB_INIT_EVENT)
    IWL_DBG_CFG_NODEF(uint32_t, MVM_CALIB_D0_FLOW)
    IWL_DBG_CFG_NODEF(uint32_t, MVM_CALIB_D0_EVENT)
    IWL_DBG_CFG_NODEF(uint32_t, MVM_CALIB_D3_FLOW)
    IWL_DBG_CFG_NODEF(uint32_t, MVM_CALIB_D3_EVENT)
    IWL_DBG_CFG_NODEF(bool, enable_timestamp_marker_cmd)
#endif
#if IS_ENABLED(CPTCFG_IWLMVM)
    IWL_DBG_CFG(uint32_t, MVM_DEFAULT_PS_TX_DATA_TIMEOUT)
    IWL_DBG_CFG(uint32_t, MVM_DEFAULT_PS_RX_DATA_TIMEOUT)
    IWL_DBG_CFG(uint32_t, MVM_WOWLAN_PS_TX_DATA_TIMEOUT)
    IWL_DBG_CFG(uint32_t, MVM_WOWLAN_PS_RX_DATA_TIMEOUT)
    IWL_DBG_CFG(uint32_t, MVM_SHORT_PS_TX_DATA_TIMEOUT)
    IWL_DBG_CFG(uint32_t, MVM_SHORT_PS_RX_DATA_TIMEOUT)
    IWL_DBG_CFG(uint32_t, MVM_UAPSD_TX_DATA_TIMEOUT)
    IWL_DBG_CFG(uint32_t, MVM_UAPSD_RX_DATA_TIMEOUT)
    IWL_DBG_CFG(uint32_t, MVM_UAPSD_QUEUES)
    IWL_DBG_CFG_NODEF(bool, MVM_USE_PS_POLL)
    IWL_DBG_CFG(uint8_t, MVM_PS_HEAVY_TX_THLD_PACKETS)
    IWL_DBG_CFG(uint8_t, MVM_PS_HEAVY_RX_THLD_PACKETS)
    IWL_DBG_CFG(uint8_t, MVM_PS_SNOOZE_HEAVY_TX_THLD_PACKETS)
    IWL_DBG_CFG(uint8_t, MVM_PS_SNOOZE_HEAVY_RX_THLD_PACKETS)
    IWL_DBG_CFG(uint8_t, MVM_PS_HEAVY_TX_THLD_PERCENT)
    IWL_DBG_CFG(uint8_t, MVM_PS_HEAVY_RX_THLD_PERCENT)
    IWL_DBG_CFG(uint16_t, MVM_PS_SNOOZE_INTERVAL)
    IWL_DBG_CFG(uint16_t, MVM_PS_SNOOZE_WINDOW)
    IWL_DBG_CFG(uint16_t, MVM_WOWLAN_PS_SNOOZE_WINDOW)
    IWL_DBG_CFG(uint8_t, MVM_LOWLAT_QUOTA_MIN_PERCENT)
    IWL_DBG_CFG(uint16_t, MVM_BT_COEX_EN_RED_TXP_THRESH)
    IWL_DBG_CFG(uint16_t, MVM_BT_COEX_DIS_RED_TXP_THRESH)
    IWL_DBG_CFG(uint32_t, MVM_BT_COEX_ANTENNA_COUPLING_THRS)
    IWL_DBG_CFG(uint32_t, MVM_BT_COEX_MPLUT_REG0)
    IWL_DBG_CFG(uint32_t, MVM_BT_COEX_MPLUT_REG1)
    IWL_DBG_CFG(bool, MVM_BT_COEX_SYNC2SCO)
    IWL_DBG_CFG(bool, MVM_BT_COEX_MPLUT)
    IWL_DBG_CFG(bool, MVM_BT_COEX_TTC)
    IWL_DBG_CFG(bool, MVM_BT_COEX_RRC)
    IWL_DBG_CFG(bool, MVM_FW_MCAST_FILTER_PASS_ALL)
    IWL_DBG_CFG(bool, MVM_FW_BCAST_FILTER_PASS_ALL)
    IWL_DBG_CFG(bool, MVM_TOF_IS_RESPONDER)
    IWL_DBG_CFG(bool, MVM_P2P_LOWLATENCY_PS_ENABLE)
    IWL_DBG_CFG(bool, MVM_SW_TX_CSUM_OFFLOAD)
    IWL_DBG_CFG(bool, MVM_HW_CSUM_DISABLE)
    IWL_DBG_CFG(bool, MVM_PARSE_NVM)
    IWL_DBG_CFG(bool, MVM_ADWELL_ENABLE)
    IWL_DBG_CFG(uint16_t, MVM_ADWELL_MAX_BUDGET)
    IWL_DBG_CFG(uint32_t, MVM_TCM_LOAD_MEDIUM_THRESH)
    IWL_DBG_CFG(uint32_t, MVM_TCM_LOAD_HIGH_THRESH)
    IWL_DBG_CFG(uint32_t, MVM_TCM_LOWLAT_ENABLE_THRESH)
    IWL_DBG_CFG(uint32_t, MVM_UAPSD_NONAGG_PERIOD)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_UAPSD_NOAGG_LIST_LEN, 1, IWL_MVM_UAPSD_NOAGG_BSSIDS_NUM)
#ifdef CPTCFG_IWLMVM_ADVANCED_QUOTA_MGMT
    IWL_DBG_CFG(bool, MVM_DYNQUOTA_DISABLED)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_DYNQUOTA_MIN_PERCENT, 0, 100)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_DYNQUOTA_GUARD_PERCENT, 0, 100)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_DYNQUOTA_HIGH_WM_PERCENT, 0, 100)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_DYNQUOTA_LOW_WM_PERCENT, 0, 100)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_DYNQUOTA_START_PERCENT, 0, 100)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_DYNQUOTA_INC_HIGH_PERCENT, 0, 100)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_LOWLAT_QUOTA_MIN_PCT_P2PCLIENT, 0, 100)
    IWL_DBG_CFG_RANGE(uint8_t, MVM_LOWLAT_QUOTA_MIN_PCT_P2PGO, 0, 100)
#endif /* CPTCFG_IWLMVM_ADVANCED_QUOTA_MGMT */
    IWL_DBG_CFG(uint8_t, MVM_QUOTA_THRESHOLD)
    IWL_DBG_CFG(uint8_t, MVM_RS_RSSI_BASED_INIT_RATE)
    IWL_DBG_CFG(uint8_t, MVM_RS_80_20_FAR_RANGE_TWEAK)
    IWL_DBG_CFG(uint8_t, MVM_RS_NUM_TRY_BEFORE_ANT_TOGGLE)
    IWL_DBG_CFG(uint8_t, MVM_RS_HT_VHT_RETRIES_PER_RATE)
    IWL_DBG_CFG(uint8_t, MVM_RS_HT_VHT_RETRIES_PER_RATE_TW)
    IWL_DBG_CFG(uint8_t, MVM_RS_INITIAL_MIMO_NUM_RATES)
    IWL_DBG_CFG(uint8_t, MVM_RS_INITIAL_SISO_NUM_RATES)
    IWL_DBG_CFG(uint8_t, MVM_RS_INITIAL_LEGACY_NUM_RATES)
    IWL_DBG_CFG(uint8_t, MVM_RS_INITIAL_LEGACY_RETRIES)
    IWL_DBG_CFG(uint8_t, MVM_RS_SECONDARY_LEGACY_RETRIES)
    IWL_DBG_CFG(uint8_t, MVM_RS_SECONDARY_LEGACY_NUM_RATES)
    IWL_DBG_CFG(uint8_t, MVM_RS_SECONDARY_SISO_NUM_RATES)
    IWL_DBG_CFG(uint8_t, MVM_RS_SECONDARY_SISO_RETRIES)
    IWL_DBG_CFG(uint8_t, MVM_RS_RATE_MIN_FAILURE_TH)
    IWL_DBG_CFG(uint8_t, MVM_RS_RATE_MIN_SUCCESS_TH)
    IWL_DBG_CFG(uint8_t, MVM_RS_STAY_IN_COLUMN_TIMEOUT)
    IWL_DBG_CFG(uint8_t, MVM_RS_IDLE_TIMEOUT)
    IWL_DBG_CFG(uint8_t, MVM_RS_MISSED_RATE_MAX)
    IWL_DBG_CFG(uint16_t, MVM_RS_LEGACY_FAILURE_LIMIT)
    IWL_DBG_CFG(uint16_t, MVM_RS_LEGACY_SUCCESS_LIMIT)
    IWL_DBG_CFG(uint16_t, MVM_RS_LEGACY_TABLE_COUNT)
    IWL_DBG_CFG(uint16_t, MVM_RS_NON_LEGACY_FAILURE_LIMIT)
    IWL_DBG_CFG(uint16_t, MVM_RS_NON_LEGACY_SUCCESS_LIMIT)
    IWL_DBG_CFG(uint16_t, MVM_RS_NON_LEGACY_TABLE_COUNT)
    IWL_DBG_CFG(uint16_t, MVM_RS_SR_FORCE_DECREASE)
    IWL_DBG_CFG(uint16_t, MVM_RS_SR_NO_DECREASE)
    IWL_DBG_CFG(uint16_t, MVM_RS_AGG_TIME_LIMIT)
    IWL_DBG_CFG(uint8_t, MVM_RS_AGG_DISABLE_START)
    IWL_DBG_CFG(uint8_t, MVM_RS_AGG_START_THRESHOLD)
    IWL_DBG_CFG(uint16_t, MVM_RS_TPC_SR_FORCE_INCREASE)
    IWL_DBG_CFG(uint16_t, MVM_RS_TPC_SR_NO_INCREASE)
    IWL_DBG_CFG(uint8_t, MVM_RS_TPC_TX_POWER_STEP)
    IWL_DBG_CFG(bool, MVM_ENABLE_EBS)
    IWL_MVM_MOD_PARAM(int, power_scheme)
    IWL_MVM_MOD_PARAM(bool, init_dbg)
    IWL_MVM_MOD_PARAM(bool, tfd_q_hang_detect)
#endif /* CPTCFG_IWLMVM */
#ifdef CPTCFG_IWLWIFI_FRQ_MGR_TEST
    IWL_DBG_CFG_NODEF(uint8_t, fm_debug_mode)
#endif
#if IS_ENABLED(CPTCFG_IWLTEST)
    IWL_MOD_PARAM(bool, trans_test)
#endif
#ifdef CPTCFG_IWLWIFI_DEVICE_TESTMODE
    IWL_DBG_CFG_NODEF(uint32_t, dnt_out_mode)
    /* XXX: should be dbgm_ or dbg_mon_ for consistency? */
    IWL_DBG_CFG_NODEF(uint32_t, dbm_destination_path)
    /* XXX: should be dbg_mon_ for consistency? */
    IWL_DBG_CFG_NODEF(uint32_t, dbgm_enable_mode)
    IWL_DBG_CFG_NODEF(uint32_t, dbgm_mem_power)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_flags)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_sample_ctl_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_sample_ctl_val)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_buff_base_addr_reg_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_buff_end_addr_reg_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_data_sel_ctl_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_data_sel_ctl_val)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_mc_msk_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_mc_msk_val)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_sample_mask_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_sample_mask_val)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_start_mask_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_start_mask_val)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_end_mask_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_end_mask_val)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_end_threshold_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_end_threshold_val)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_sample_period_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_sample_period_val)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_wr_ptr_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_cyc_cnt_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_dmarb_rd_ctl_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_dmarb_rd_data_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_marbh_conf_reg)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_marbh_conf_mask)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_marbh_access_type)
    IWL_DBG_CFG_NODEF(uint32_t, dbgc_hb_base_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbgc_hb_end_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbgc_dram_wrptr_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbgc_wrap_count_addr)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mipi_conf_reg)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mipi_conf_mask)
    IWL_DBG_CFG_NODEF(uint32_t, dbgc_hb_base_val_smem)
    IWL_DBG_CFG_NODEF(uint32_t, dbgc_hb_end_val_smem)
    IWL_DBG_CFG_BIN(dbg_conf_monitor_host_command)
    IWL_DBG_CFG_BIN(log_level_cmd)
    IWL_DBG_CFG_BINA(ldbg_cmd, 32)
    IWL_DBG_CFG_NODEF(uint8_t, log_level_cmd_id)
    IWL_DBG_CFG_NODEF(uint8_t, dbg_conf_monitor_cmd_id)
    IWL_DBG_CFG_NODEF(uint8_t, ldbg_cmd_nums)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_buff_base_addr_reg_addr_b_step)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_buff_end_addr_reg_addr_b_step)
    IWL_DBG_CFG_NODEF(uint32_t, dbg_mon_wr_ptr_addr_b_step)
#endif /* CPTCFG_IWLWIFI_DEVICE_TESTMODE */
    IWL_DBG_CFG_BIN(hw_address)
    IWL_DBG_CFG_STR(fw_dbg_conf)
    IWL_DBG_CFG_STR(nvm_file)
    IWL_DBG_CFG_STR(fw_file_pre)
    IWL_DBG_CFG_NODEF(uint32_t, d0i3_debug)
    IWL_DBG_CFG_NODEF(uint32_t, valid_ants)
    IWL_DBG_CFG_NODEF(uint32_t, no_ack_en)
    IWL_DBG_CFG_NODEF(bool, no_ldpc)
    IWL_DBG_CFG_NODEF(uint16_t, rx_mcs_80)
    IWL_DBG_CFG_NODEF(uint16_t, tx_mcs_80)
    IWL_DBG_CFG_NODEF(uint16_t, rx_mcs_160)
    IWL_DBG_CFG_NODEF(uint16_t, tx_mcs_160)
    IWL_DBG_CFG_NODEF(uint32_t, secure_boot_cfg)
    IWL_MOD_PARAM(uint32_t, uapsd_disable)
    IWL_MOD_PARAM(bool, d0i3_disable)
    IWL_MOD_PARAM(bool, lar_disable)
    IWL_MOD_PARAM(bool, fw_monitor)
    IWL_MOD_PARAM(bool, fw_restart)
    IWL_MOD_PARAM(bool, power_save)
    IWL_MOD_PARAM(bool, bt_coex_active)
    IWL_MOD_PARAM(int, antenna_coupling)
    IWL_MOD_PARAM(int, power_level)
    IWL_MOD_PARAM(int, led_mode)
    IWL_MOD_PARAM(int, amsdu_size)
    IWL_MOD_PARAM(int, swcrypto)
    IWL_MOD_PARAM(uint, disable_11n)
    IWL_MOD_PARAM(uint, d0i3_timeout)
    IWL_DBG_CFG_BIN(he_ppe_thres)
    IWL_DBG_CFG_NODEF(uint8_t, he_chan_width_dis)
    IWL_DBG_CFG_NODEF(uint32_t, vht_cap_flip)
#ifdef CPTCFG_IWLWIFI_DEBUG
    IWL_MOD_PARAM(uint32_t, debug_level)
#endif /* CPTCFG_IWLWIFI_DEBUG */
#ifdef CPTCFG_IWLWIFI_DISALLOW_OLDER_FW
    IWL_DBG_CFG_NODEF(bool, load_old_fw)
#endif /* CPTCFG_IWLWIFI_DISALLOW_OLDER_FW */
#if IS_ENABLED(CPTCFG_IWLFMAC)
    IWL_DBG_CFG_NODEF(bool, intcmd_dbg)
#endif /* CPTCFG_IWLFMAC */
#undef IWL_DBG_CFG
#undef IWL_DBG_CFG_STR
#undef IWL_DBG_CFG_NODEF
#undef IWL_DBG_CFG_BIN
#undef IWL_DBG_CFG_BINA
#undef IWL_DBG_CFG_RANGE
#undef IWL_MOD_PARAM
#undef IWL_MVM_MOD_PARAM
#ifndef DBG_CFG_REINCLUDE
};

extern struct iwl_dbg_cfg current_dbg_config;
void iwl_dbg_cfg_free(struct iwl_dbg_cfg* dbgcfg);
void iwl_dbg_cfg_load_ini(struct device* dev, struct iwl_dbg_cfg* dbgcfg);
#endif /* DBG_CFG_REINCLUDE */

#endif  // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_DBG_CFG_H_
