/******************************************************************************
 *
 * Copyright(c) 2014 Intel Corporation. All rights reserved.
 * Copyright(c) 2014 - 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.
 *
 *****************************************************************************/

#include "src/iwlwifi/iwl-config.h"

/* Highest firmware API version supported */
#define IWL8000_UCODE_API_MAX 36
#define IWL8265_UCODE_API_MAX 36

/* Lowest firmware API version supported */
#define IWL8000_UCODE_API_MIN 22
#define IWL8265_UCODE_API_MIN 22

/* NVM versions */
#define IWL8000_NVM_VERSION 0x0a1d

/* Memory offsets and lengths */
#define IWL8260_DCCM_OFFSET 0x800000
#define IWL8260_DCCM_LEN 0x18000
#define IWL8260_DCCM2_OFFSET 0x880000
#define IWL8260_DCCM2_LEN 0x8000
#define IWL8260_SMEM_OFFSET 0x400000
#define IWL8260_SMEM_LEN 0x68000

#define IWL8000_FW_PRE "iwlwifi-8000C-"
#define IWL8000_MODULE_FIRMWARE(api) IWL8000_FW_PRE __stringify(api) ".ucode"

#define IWL8265_FW_PRE "iwlwifi-8265-"
#define IWL8265_MODULE_FIRMWARE(api) IWL8265_FW_PRE __stringify(api) ".ucode"

#define DEFAULT_NVM_FILE_FAMILY_8000C "nvmData-8000C"

static const struct iwl_base_params iwl8000_base_params = {
    .eeprom_size = OTP_LOW_IMAGE_SIZE_32K,
    .num_of_queues = 31,
    .max_tfd_queue_size = 256,
    .shadow_ram_support = true,
    .led_compensation = 57,
    .wd_timeout = IWL_LONG_WD_TIMEOUT,
    .max_event_log_size = 512,
    .shadow_reg_enable = true,
    .pcie_l1_allowed = true,
};

static const struct iwl_ht_params iwl8000_ht_params = {
    .stbc = true,
    .ldpc = true,
    .ht40_bands = BIT(WLAN_INFO_BAND_2GHZ) | BIT(WLAN_INFO_BAND_5GHZ),
};

static const struct iwl_tt_params iwl8000_tt_params = {
    .ct_kill_entry = 115,
    .ct_kill_exit = 93,
    .ct_kill_duration = 5,
    .dynamic_smps_entry = 111,
    .dynamic_smps_exit = 107,
    .tx_protection_entry = 112,
    .tx_protection_exit = 105,
    .tx_backoff =
        {
            {.temperature = 110, .backoff = 200},
            {.temperature = 111, .backoff = 600},
            {.temperature = 112, .backoff = 1200},
            {.temperature = 113, .backoff = 2000},
            {.temperature = 114, .backoff = 4000},
        },
    .support_ct_kill = true,
    .support_dynamic_smps = true,
    .support_tx_protection = true,
    .support_tx_backoff = true,
};

// TODO(fxbug.dev/61069): We temporarily removed .features = NETIF_F_RXCSUM. Add it back when the
//                        WLAN driver supports it.
#define IWL_DEVICE_8000_COMMON                                                                    \
  .device_family = IWL_DEVICE_FAMILY_8000, .base_params = &iwl8000_base_params,                   \
  .led_mode = IWL_LED_RF_STATE, .nvm_hw_section_num = 10, .features = 0, .non_shared_ant = ANT_A, \
  .dccm_offset = IWL8260_DCCM_OFFSET, .dccm_len = IWL8260_DCCM_LEN,                               \
  .dccm2_offset = IWL8260_DCCM2_OFFSET, .dccm2_len = IWL8260_DCCM2_LEN,                           \
  .smem_offset = IWL8260_SMEM_OFFSET, .smem_len = IWL8260_SMEM_LEN,                               \
  .default_nvm_file_C_step = DEFAULT_NVM_FILE_FAMILY_8000C, .thermal_params = &iwl8000_tt_params, \
  .apmg_not_supported = true, .nvm_type = IWL_NVM_EXT, .dbgc_supported = true,                    \
  .min_umac_error_event_table = 0x800000, .csr = &iwl_csr_v1

#define IWL_DEVICE_8000                                           \
  IWL_DEVICE_8000_COMMON, .ucode_api_max = IWL8000_UCODE_API_MAX, \
                          .ucode_api_min = IWL8000_UCODE_API_MIN

#define IWL_DEVICE_8260                                           \
  IWL_DEVICE_8000_COMMON, .ucode_api_max = IWL8000_UCODE_API_MAX, \
                          .ucode_api_min = IWL8000_UCODE_API_MIN

#define IWL_DEVICE_8265                                           \
  IWL_DEVICE_8000_COMMON, .ucode_api_max = IWL8265_UCODE_API_MAX, \
                          .ucode_api_min = IWL8265_UCODE_API_MIN

const struct iwl_cfg iwl8260_2n_cfg = {
    .name = "Intel(R) Dual Band Wireless N 8260",
    .fw_name_pre = IWL8000_FW_PRE,
    IWL_DEVICE_8260,
    .ht_params = &iwl8000_ht_params,
    .nvm_ver = IWL8000_NVM_VERSION,
};

const struct iwl_cfg iwl8260_2ac_cfg = {
    .name = "Intel(R) Dual Band Wireless AC 8260",
    .fw_name_pre = IWL8000_FW_PRE,
    IWL_DEVICE_8260,
    .ht_params = &iwl8000_ht_params,
    .nvm_ver = IWL8000_NVM_VERSION,
    .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
};

const struct iwl_cfg iwl8265_2ac_cfg = {
    .name = "Intel(R) Dual Band Wireless AC 8265",
    .fw_name_pre = IWL8265_FW_PRE,
    IWL_DEVICE_8265,
    .ht_params = &iwl8000_ht_params,
    .nvm_ver = IWL8000_NVM_VERSION,
    .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
    .vht_mu_mimo_supported = true,
};

const struct iwl_cfg iwl8275_2ac_cfg = {
    .name = "Intel(R) Dual Band Wireless AC 8275",
    .fw_name_pre = IWL8265_FW_PRE,
    IWL_DEVICE_8265,
    .ht_params = &iwl8000_ht_params,
    .nvm_ver = IWL8000_NVM_VERSION,
    .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
    .vht_mu_mimo_supported = true,
};

const struct iwl_cfg iwl4165_2ac_cfg = {
    .name = "Intel(R) Dual Band Wireless AC 4165",
    .fw_name_pre = IWL8000_FW_PRE,
    IWL_DEVICE_8000,
    .ht_params = &iwl8000_ht_params,
    .nvm_ver = IWL8000_NVM_VERSION,
    .max_ht_ampdu_exponent = IEEE80211_HT_MAX_AMPDU_64K,
};
